IoAttachDevice總是會綁定設備棧上最頂層的那個設備。
AttachedDevice是一個用來返回的指針的指針。綁定成功後,被綁定的設備指針被返回到這個地址。
前面已經提到了並不是所有的設備都有設備名字,所以依靠IoAttachDevice無法綁定沒有名字的設備。另外還有兩個API:一個是
IoAttachDeviceToDeviceStack,另一個是IoAttachDeviceToDeviceStackSafe。這兩個函式功能一樣,都是根據設備對象的
指針(而不是名字)進行綁定;區別是IoAttachDeviceToDeviceStackSafe更加安全,而且只有在Windows 2000SP4和Windows XP
以上的系統中才有。一般都使用IoAttachDeviceToDeviceStackSafe,但當試圖兼容較低版本的Windows 2000時,
應該使用IoAttachDeviceToDeviceStack。
NTSTATUS IoAttachDeviceToDeviceStackSafe( IN PDEVICE_OBJECT SourceDevice, // 過濾設備 IN PDEVICE_OBJECT TargetDevice, // 要被綁定的設備棧中的設備 IN OUT PDEVICE_OBJECT *AttachedToDeviceObject// 返回最終被綁定的設備 ); |
在Window 2000下應該使用另外一個函式IoAttachDeviceToDeviceStack,這個函式除了缺少最後一個參數之外(實際上放到返回值里了),
其他的和IoAttachDeviceToDeviceStackSafe函式相同。
PDEVICE_OBJECT IoAttachDeviceToDeviceStack( IN PDEVICE_OBJECT SourceDevice, IN PDEVICE_OBJECT TargetDevice ); |
這個函式返回了最終被綁定的設備指針,這也就導致了它不能返回一個明確的錯誤碼。但是如果為NULL,則表示綁定失敗了。