DeviceIoControl操作物件引數的區別

2021-07-03 05:55:16 字數 1441 閱讀 2561

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...