阅读:1004回复:3
在DDK中如何获得另外一个驱动的DeviceObject?也就是如何打开低级驱动?
这种方法为什么不行?
WCHAR deviceName=L\"\\\\\\\\.\\\\CryptpciDevice0\"; RtlInitUnicodeString(&pciDeviceName,deviceName); IoGetDeviceObjectPointer(&pDeviceName,FILE_READ_DATA,&pFO,&pDO); 其中 L\"\\\\\\\\.\\\\CryptpciDevice0\"; 是这样来的 CryptpciDevice * pDevice = new ( static_cast<PCWSTR>(KUnitizedName(L\"CryptpciDevice\", m_Unit)), FILE_DEVICE_UNKNOWN, static_cast<PCWSTR>(KUnitizedName(L\"CryptpciDevice\", m_Unit)), 0, DO_DIRECT_IO | DO_POWER_PAGABLE ) 我在应用程序里面用一下代码能打开! char *sLinkName = \"\\\\\\\\.\\\\CryptpciDevice0\"; CreateFile(sLinkName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); 是不是一定要用这几个函数来获得另一个驱动的DeviceObject ZwCreateFile ObReferenceObjectByHandle,IoGetRelatedDeviceObject |
|
|
沙发#
发布于:2003-02-28 17:04
symbolink name是给Win32的程序用的,因为他看不见device object name
|
|
板凳#
发布于:2003-02-28 20:13
你把
WCHAR deviceName=L\"\\\\\\\\.\\\\CryptpciDevice0\"; 改成 WCHAR deviceName=L\"\\\\Device\\\\CryptpciDevice0\"; 就可以了 。 |
|
|
地板#
发布于:2003-02-28 20:16
symbolink name是给Win32的程序用的,因为他看不见device object name 如这位大哥说的,Symboling 是给应用程序用的。 在内核里直接用 \\\\Device\\\\Drivername 就行了 |
|
|