HSA
Гость
|
|
« : 19-01-2004 18:06 » |
|
Всем доброго времени суток. Вопрос в следующем. Для формирования запросов на точку Interrupt(In) взял целиком класс KUsbInterruptTransfer из примеров Numeg'и. В описании там дают понять, что для запуска процедуры постоянного опроса точки необходимо вызвать две процедуры: NTSTATUS Initialize( KUsbLowerDevice* Dev, KUsbPipe* InterruptPipe, BOOLEAN bShortOk=TRUE ); и, собственно метод: NTSTATUS StartPolling( KMemory& Mdl, ULONG Length, USB_INTERRUPT_CALLBACK pfnOnInterrupt, PVOID pClientContext=NULL ); Взято из примера исходника EzUsb. Так же, как и в примере инициализирую, все проходит нормально (правда, там и подругому быть не может). В методе OnStartDevice(KIrp I) вызываю StartPolling... Кстати, его внутненности: NTSTATUS KUsbInterruptTransfer::StartPolling( PVOID Buffer, ULONG Length, USB_INTERRUPT_CALLBACK pfnOnInterrupt, PVOID pClientContext ) { ASSERT( m_InterruptPipe->IsOpen() );
if( ! m_InterruptPipe->IsOpen() ) { return STATUS_INVALID_DEVICE_STATE; }
// allocate a new context structure PINT_COMPLETION_INFO pCompInfo = new (NonPagedPool) INT_COMPLETION_INFO;
// make sure it succeeded if( NULL == pCompInfo ) { return STATUS_INSUFFICIENT_RESOURCES; }
// initialize the context structure pCompInfo->m_pClass = this; pCompInfo->m_pfnOnInterrupt = pfnOnInterrupt; pCompInfo->m_pClientContext = pClientContext;
m_InterruptPipe->BuildInterruptTransfer( Buffer, Length, m_bShortOk, NULL, m_pIntUrb );
return m_InterruptPipe->SubmitUrb( m_KIrp, m_pIntUrb, LinkTo(InterruptTransferComplete), pCompInfo ); }
Вылетает система (UNEXPECTED_KERNEL_MODE_TRAP) на последней строке (при выполнении SubmitUrb). Как побороть эту беду?
|