deviceiocontrol函式可以直接操作硬體比如硬碟,光碟機等等。這個函式有乙個控制碼ioctl_***和fsctl_***。
通過這兩種控制碼其實就可以區分出操作的物件的不同。ioctl_***操作的物件如果是硬碟的話,只能是物理路徑,(\\\\.\\physicaldrive0)
fsctl_***是分割槽(卷)路徑(\\\\.\\d:)
如下面這個函式:
bool updatepartition(cstring letter)
cstring drive;
drive.format(_t("\\\\.\\physicaldrive%d"),dwdisknum);
handle hdisk = createfile(drive,generic_read|generic_write,file_share_read|file_share_write,null,open_existing,file_attribute_device,null);
if (hdisk == invalid_handle_value)
deviceiocontrol(hdisk,ioctl_disk_update_properties,null,0,null,0,&readed,null);
closehandle(hdisk);
cstring cspartition;
cspartition.format(_t("\\\\.\\%s"),letter);
cspartition.trimright(_t("\\"));
handle hpartition = createfile(cspartition,generic_read|generic_write,file_share_read|file_share_write,null,open_existing,file_attribute_device,null);
if (hpartition == invalid_handle_value)
deviceiocontrol((handle) hpartition, (dword) fsctl_lock_volume, null,0,null, 0, (lpdword) &readed,null);
deviceiocontrol(hpartition, fsctl_dismount_volume, null, 0, null,0, &readed, null);
deviceiocontrol((handle) hpartition, (dword) fsctl_unlock_volume, null,0,null, 0, (lpdword) &readed,null);
closehandle(hpartition);
return true;
}
這個函式是用來更新對硬碟的操作的,第乙個更新分割槽表的 ioctl_disk_update_properties, 所以第乙個引數取自物理磁碟驅動器編號 關於DeviceIoControl實現非同步的筆記
鏈結位址 一直所做的都是同步實現的。當然很多情況這並不是很好的解決問題。現在手上的問題是 使用者層通知底層驅動 filter driver 做某件事,然後返回該事件執行的結果。如果該事件是一件簡單的事情,這裡是指極短時間內可以完成的,那麼在允許範圍內,我們可以用同步來完成。但是如果該事件是一件耗時的...
DeviceIOControl詳解 各個擊破
deviceiocontrol這個api我們用的不多,但是很重要,有時會幫助我們實現一些特別的需求,如獲取硬體裝置資訊 與硬體裝置通訊 讀寫資料 等,對照msdn,下面我們詳細解釋一下這個api的用法 有什麼錯誤再所難免,各位不吝指教啊 deviceiocontrol是用來控制我們指定裝置的輸入輸出...
通過DeviceIoControl獲取真實網絡卡位址
我們可以通過deviceiocontrol介面與核心驅動通訊來獲取真實網絡卡以及當前網絡卡的位址。首先包含標頭檔案 include 網絡卡標識,xp下可以在登錄檔下對應位置找到,本例 hkey local machine software microsoft windows nt currentve...