⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usb_driver.cpp

📁 s3c44b0 qudong 程序原码 以及各种驱动接口的原码 书中自带的程序USB
💻 CPP
字号:
NTSTATUS Asgccusb::DriverEntry(PUNICODE_STRING RegistryPath)     //驱程入口
{
	KRegistryKey Params(RegistryPath, L"Parameters");
	if ( NT_SUCCESS(Params.LastError()) )
	{
		LoadRegistryParameters(Params);
	}
	m_Unit = 0;
	return STATUS_SUCCESS;
}
NTSTATUS Asgccusb::AddDevice(PDEVICE_OBJECT Pdo)               //增加设备
{
	AsgccusbDevice * pDevice = new (
			static_cast<PCWSTR>(KUnitizedName(L"AsgccusbDevice", m_Unit)),
			FILE_DEVICE_UNKNOWN,
			NULL,
			0,
			DO_DIRECT_IO
				| DO_POWER_PAGABLE
			)                      
		AsgccusbDevice(Pdo, m_Unit);
	if (pDevice == NULL)
	{
	    return STATUS_INSUFFICIENT_RESOURCES;
	}
	NTSTATUS status = pDevice->ConstructorStatus();
	if ( !NT_SUCCESS(status) )
	{
		delete pDevice;
	}
	else
	{
		m_Unit++;
		pDevice->ReportNewDevicePowerState(PowerDeviceD0);
	}
	return status;
}


NTSTATUS AsgccusbDevice::Read(KIrp I)                         //读例程
{
    if (!NT_SUCCESS(I.Information()))
	{
		I.Information() = 0;
		return I.PnpComplete(this, STATUS_INVALID_PARAMETER);
	}
	if (I.ReadSize() == 0)
	{
		I.Information() = 0;
		return I.PnpComplete(this, STATUS_SUCCESS);
	}
	KMemory Mem(I.Mdl());
    ULONG dwTotalSize = I.ReadSize(CURRENT);
	ULONG dwMaxSize = m_Endpoint2IN.MaximumTransferSize();
	if (dwTotalSize > dwMaxSize)                             //超过最大长度
	{
		ASSERT(dwMaxSize);
		dwTotalSize = dwMaxSize;
	}
	USB_COMPLETION_INFO*pCompInfo=new(NonPagedPool)USB_COMPLETION_INFO;
	if (pCompInfo == NULL)
	{
		I.Information() = 0;
		return I.PnpComplete(this, STATUS_INSUFFICIENT_RESOURCES);
	}
	PURB pUrb = m_Endpoint2IN.BuildBulkTransfer(
			    	Mem,      	
					dwTotalSize,  	
					TRUE,         
					NULL,			
					TRUE			
					);        		
	if (pUrb == NULL)
	{
		delete pCompInfo;
		I.Information() = 0;
		return I.PnpComplete(this, STATUS_INSUFFICIENT_RESOURCES);
	}
	pCompInfo->m_pClass = this;
	pCompInfo->m_pUrb = pUrb;
	NTSTATUS status;
	status = m_Endpoint2IN.SubmitUrb(I, pUrb, LinkTo(ReadComplete), pCompInfo, 0);
	return status;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -