亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

CreateFile 函數打開設備失敗?

CreateFile 函數打開設備失敗?

侃侃爾雅 2019-02-04 09:05:49
//這是我驅動程序中的代碼RtlInitUnicodeString(&uniNtNameString, L"\\Device\\Jow"); status = IoCreateDevice( //這個函數沒問題,成功的IN DriverObject, IN FILE_DEVICE_FILE_SYSTEM,IN &uniNtNameString, //NameIN 0x15,//NULLIN 0, IN FALSE, OUT &pFilterDeviceObject);if(STATUS_SUCCESS == status){DbgPrint("創建設備成功"); }else{DbgPrint("創建設備失敗");}//這是我R3層的代碼hDevice = CreateFile("//./Jow", // drive to open //這個函一直失敗0, // no access to the driveFILE_SHARE_READ | // share modeFILE_SHARE_WRITE,NULL, // default security attributesOPEN_EXISTING, // disposition0, // file attributesNULL); // do not copy file attributesif (hDevice == INVALID_HANDLE_VALUE) // cannot open the drive{AfxMessageBox("打開設備失敗"); //失敗到這一行return;}現在我試了好多的驅動名字 CreateFile 一直失敗,我想知我用IoCreateDevice創建的設備,到底叫什么名字。換一個問題吧,我想知道如果我用 IoCreateSymbolicLink(&LinkString,&NameString);這個函數創建的話,LinkString 這個參數是多少才正確?
查看完整描述

2 回答

?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

那是因為你創建的是設備名稱,這個只能在ring0層訪問。
要想在ring3層訪問,需要創建ring3層可以訪問的符號鏈接與設備關聯。
RtlInitUnicodeString(&ustrSymLink,L"\\??\\Jow_SymLink");

IoCreateSymbolicLink(&ustrSymLink,&uniNtNameString);

ring3層訪問的時候CreateFile("\\\\.\\Jow_SymLink",........)

查看完整回答
反對 回復 2019-03-18
?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

那是因你創建的是設備名稱,這個只能在ring0層訪問。
要想在ring3層訪問,需要創建ring3層可以訪問的符號鏈接與設備關聯。
RtlInitUnicodeString(&ustrSymLink,L"\\??\\Jow_SymLink");

IoCreateSymbolicLink(&ustrSymLink,&uniNtNameString);

ring3層訪問的時候CreateFile("\\\\.\\Jow_SymLink",........)
微軟預定義的標準設備中含有“COM1”-“COM9”。所以,“COM1”-“COM9”作為文件名傳遞給函數操作系統會自動地將之解析為相應的設備。但對于COM10及以上的串口,“COM10”之類的文件名系統只視之為一般意義上的文件,而非串行設備。

查看完整回答
反對 回復 2019-03-18
  • 2 回答
  • 0 關注
  • 1382 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號