描述:
            我用ds生成了一个驱动,然后根据ds提供的ezusb的例子,添加了一些代码。
在downloadfirmware这个函数中,先当下去了loader这个程序,然后再当一个dev_io程序(有cypress提供的例子),用drivermonitor察看,发现loader成功当下去,但当dev_io的时候就没反应了。然后,再拔出设备,才会出现“failed to  download dev_io”的信息。
NTSTATUS USBDRMDevice::DownloadFirmware(void)
{
	t << "Entering DownloadFirmware\n";
	NTSTATUS status = STATUS_SUCCESS;
	Reset8051(1);
	status = DownloadIntelHex(loader);
	if( !NT_SUCCESS(status) )
		return status;
	t<<"Download loader OK!\n";
	Reset8051(0);
	status = DownloadIntelHex(dev_io);
	if( !NT_SUCCESS(status) )
	{
		t << "Fail to Download dev_io\n";
		return status;
	}
	else
	{
		t << "Download dev_io OK!\n";
	}
	Reset8051(1);
	Reset8051(0);
	return status;
}
downloadintelhex调用了下面的函数
NTSTATUS USBDRMDevice::DownloadRAM(PINTEL_HEX_RECORD pHexRecord, bool fExternal)
{
	t << "Entering DownloadRAM\n";
	NTSTATUS status = STATUS_SUCCESS;
	URB Urb;
	while( 0 == pHexRecord->Type )
	{
		if( fExternal ? 
                      (! INTERNAL_R(pHexRecord>Address )) : 
                      (INTERNAL_RAM( pHexRecord->Address ))  
		  )
		{
		   m_Lower.BuildVendorRequest(
					pHexRecord->Data,
					pHexRecord->Length,
					0,
					static_cast<UCHAR>( 
					fExternal ?
                                              ANCHOR_LOAD_EXTERNAL : 
                                              ANCHOR_LOAD_INTERNAL),
					pHexRecord->Address,
					FALSE,	//default
				         FALSE,	//default
					NULL,	//default
					0,	//default
				URB_FUNCTION_VENDOR_DEVICE,//default
					&Urb
					);
		   status = m_Lower.SubmitUrb(&Urb);
		   if( !NT_SUCCESS(status) )
		    {
		      t << " SubmitUrb Failed ! \n";
		      break;
		     }
		   else
		    {
		      t << " SubmitUrb OK! \n";
		      break;
		     }
		    }
	    pHexRecord++;
	}
	return status;
}
SubmitUrb这个函数既没返回成功,也没返回失败?
它将irp传到底层的驱动,但我如何知道irp处理的情况?
irp到底是如何进行工作的?
这个问题已经搞了很久了,一直没搞定,还请各位指点指点!急啊!

