| 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). Как побороть эту беду?
 |