deviceiocontrol鍑芥暟鎬庝箞浣跨敤
DeviceIoControl鍑芥暟鏄疻indows鎿嶄綔绯荤粺鎻愪緵鐨勪竴涓敤浜庝笌璁惧杩涜閫氫俊鐨勫嚱鏁般€傚畠鍙互鐢ㄤ簬涓庡悇绉嶈澶囪繘琛岄€氫俊锛屽纾佺洏椹卞姩鍣ㄣ€佷覆鍙c€佸苟鍙c€乁SB璁惧绛夈€?/p>
浣跨敤DeviceIoControl鍑芥暟锛岄渶瑕佷互涓嬫楠わ細
- 鎵撳紑璁惧鍙ユ焺锛氫娇鐢–reateFile鍑芥暟鎵撳紑璁惧锛岃幏鍙栬澶囩殑鍙ユ焺銆?/li>
HANDLE hDevice = CreateFile(
L"\\\\.\\DeviceName", // 璁惧鍚嶇О锛屽COM1锛孿\\\.\\COM1
GENERIC_READ | GENERIC_WRITE, // 璁块棶鏉冮檺
0, // 鍏变韩妯″紡
NULL, // 瀹夊叏灞炴€?/span>
OPEN_EXISTING, // 鎵撳紑鏂瑰紡
FILE_ATTRIBUTE_NORMAL, // 鏂囦欢灞炴€?/span>
NULL // 妯℃澘鏂囦欢鍙ユ焺
);
- 璁剧疆璁惧鎺у埗鐮侊細鏍规嵁璁惧鐨勮姹傦紝璁剧疆鐩稿簲鐨勮澶囨帶鍒剁爜銆?/li>
DWORD dwIoControlCode = IOCTL_DEVICE_CODE; // 鑷畾涔夎澶囨帶鍒剁爜
- 鍑嗗杈撳叆/杈撳嚭缂撳啿鍖猴細鏍规嵁璁惧鐨勮姹傦紝鍑嗗杈撳叆鍜岃緭鍑虹紦鍐插尯銆?/li>
LPVOID lpInBuffer = NULL; // 杈撳叆缂撳啿鍖烘寚閽?/span>
DWORD nInBufferSize = 0; // 杈撳叆缂撳啿鍖哄ぇ灏?/span>
LPVOID lpOutBuffer = NULL; // 杈撳嚭缂撳啿鍖烘寚閽?/span>
DWORD nOutBufferSize = 0; // 杈撳嚭缂撳啿鍖哄ぇ灏?/span>
- 璋冪敤DeviceIoControl鍑芥暟杩涜璁惧閫氫俊锛?/li>
BOOL bResult = DeviceIoControl(
hDevice, // 璁惧鍙ユ焺
dwIoControlCode, // 璁惧鎺у埗鐮?/span>
lpInBuffer, // 杈撳叆缂撳啿鍖烘寚閽?/span>
nInBufferSize, // 杈撳叆缂撳啿鍖哄ぇ灏?/span>
lpOutBuffer, // 杈撳嚭缂撳啿鍖烘寚閽?/span>
nOutBufferSize, // 杈撳嚭缂撳啿鍖哄ぇ灏?/span>
NULL, // 瀹為檯璇诲彇/鍐欏叆鐨勫瓧鑺傛暟
NULL // 寮傛I/O鐨凮VERLAPPED缁撴瀯鎸囬拡
);
-
澶勭悊璁惧杩斿洖缁撴灉锛氭牴鎹澶囪繑鍥炵殑缁撴灉锛岃繘琛岀浉搴旂殑澶勭悊銆?/p>
-
鍏抽棴璁惧鍙ユ焺锛氫娇鐢–loseHandle鍑芥暟鍏抽棴璁惧鍙ユ焺銆?/p>
CloseHandle(hDevice);
闇€瑕佹敞鎰忕殑鏄紝鍏蜂綋浣跨敤DeviceIoControl鍑芥暟鐨勫弬鏁板拰璁惧鎺у埗鐮侊紝闇€瑕佹牴鎹叿浣撶殑璁惧鍜岄渶姹傝€屽畾銆傛瘡涓澶囩殑璁惧鎺у埗鐮佸拰閫氫俊鏂瑰紡閮藉彲鑳戒笉鍚岋紝闇€瑕佹煡闃呯浉鍏宠澶囨枃妗f垨椹卞姩绋嬪簭鐨勫紑鍙戞枃妗f潵鑾峰彇鍏蜂綋鐨勪俊鎭€?/p>