Windows の deviceiocontrol 関数はどのように呼び出しますか

Windows では、DeviceIoControl 関数を使用してデバイスと通信します。DeviceIoControl 関数の呼び出し方法は次のとおりです。

  1. デバイス ハンドルを開く。
  2. HANDLE hDevice = CreateFile(
    L”\\\\.\\DeviceName”, // デバイス名、例: \\\\.\\COM1
    GENERIC_READ | GENERIC_WRITE, // アクセス権
    0, // 共有モード、通常は0に設定
    NULL, // セキュリティ記述子、通常はNULLに設定
    OPEN_EXISTING, // 既存デバイスを開く
    FILE_ATTRIBUTE_NORMAL, // ファイル属性
    NULL); // テンプレートハンドル、通常はNULLに設定
  3. デバイス名は、デバイス名でシリアルポート(COM1、COM2 など)やディスク(\Device\Harddisk0\Partition1)などになります。
  4. デバイスのコントロールコマンドの設定または取得:
  5. BOOL bResult = DeviceIoControl(
    hDevice, // デバイスハンドル
    dwIoControlCode, // 制御コード(IOCTL_DISK_GET_DRIVE_GEOMETRY など)
    lpInBuffer, // 入力バッファー(省略可能)
    nInBufferSize, // 入力バッファーのサイズ(省略可能)
    lpOutBuffer, // 出力バッファー(省略可能)
    nOutBufferSize, // 出力バッファーのサイズ(省略可能)
    &dwBytesReturned, // 返されたバイト数
    NULL); // 非同期操作ハンドル(通常は NULL に設定)
  6. dwIoControlCodeはデバイス制御コマンドで、IOCTL_DISK_GET_DRIVE_GEOMETRYなどがあります。lpInBufferとnInBufferSizeは、コマンドに必要な引数を渡す入力バッファーとサイズです。lpOutBufferとnOutBufferSizeは、デバイスから返される情報を格納する出力バッファとサイズです。&dwBytesReturnedは、実際に転送されたバイト数を返すために使用されます。
  7. デバイスハンドルをクローズする:
  8. CloseHandle(hDevice);
  9. DeviceIoControl 関数の使用後は、デバイス ハンドルのクローズでリソースを解放してください。

注意事項

  1. `windows.h`ヘッダファイルが必要です。
  2. このプログラムを実行するには管理者権限が必要です。
  3. コントロールコードとパラメータの具体的な値および使用方法については、各デバイスドライバのインターフェースドキュメントを参照すること。
bannerAds