DeviceIoControl

指定したデバイスドライバに直接制御コードを送信し、対応するデバイスに対応する操作を実行させる。

DeviceIoControl hDevice, dwIoControlCode, lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped

hDevice : [intptr] 操作を実行するデバイスへのハンドル。デバイスは通常、ボリューム、ディレクトリ、ファイル、またはストリームである。デバイスハンドルを取得するには CreateFile 関数を使用する。詳細は Remarks を参照。
dwIoControlCode : [int] 操作の制御コード。この値は実行する特定の操作と、その操作を実行するデバイスの種類を識別する。制御コードのリストについては Remarks を参照。各制御コードのドキュメントには lpInBuffer、nInBufferSize、lpOutBuffer、nOutBufferSize パラメータの使用方法が記載されている。
lpInBuffer : [intptr] 操作を実行するために必要なデータを含む入力バッファへのポインタ。このデータの形式は dwIoControlCode パラメータの値に依存する。dwIoControlCode が入力データを必要としない操作を指定する場合、このパラメータは NULL でよい。
nInBufferSize : [int] 入力バッファのサイズ(バイト数)。
lpOutBuffer : [intptr] 操作で返されたデータを受け取る出力バッファへのポインタ。このデータの形式は dwIoControlCode パラメータの値に依存する。dwIoControlCode がデータを返さない操作を指定する場合、このパラメータは NULL でよい。
nOutBufferSize : [int] 出力バッファのサイズ(バイト数)。
lpBytesReturned : [var] 出力バッファに格納されたデータのサイズ(バイト数)を受け取る変数へのポインタ。出力バッファが小さすぎてデータを受け取れない場合、呼び出しは失敗し GetLastError は ERROR_INSUFFICIENT_BUFFER を返し、lpBytesReturned は 0 となる。出力バッファがすべてのデータを格納するには小さいが一部のエントリは保持できる場合、ドライバによっては収まる分のデータを返す。この場合、呼び出しは失敗し GetLastError は ERROR_MORE_DATA を返し、lpBytesReturned は受け取ったデータ量を示す。アプリケーションは新しい開始位置を指定して同じ操作で DeviceIoControl を再度呼び出すべきである。lpOverlapped が NULL の場合、lpBytesReturned は NULL であってはならない。出力データを返さない操作で lpOutBuffer が NULL の場合でも、DeviceIoControl は lpBytesReturned を使用する。そのような操作の後、lpBytesReturned の値には意味がない。lpOverlapped が NULL でない場合、lpBytesReturned は NULL でもよい。このパラメータが NULL でなく操作がデータを返す場合、オーバーラップ操作が完了するまで lpBytesReturned には意味がない。返されたバイト数を取得するには GetOverlappedResult を呼ぶ。hDevice が I/O 完了ポートに関連付けられている場合、GetQueuedCompletionStatus を呼ぶことで返されたバイト数を取得できる。
lpOverlapped : [var] OVERLAPPED 構造体へのポインタ。FILE_FLAG_OVERLAPPED を指定せずに hDevice を開いた場合、lpOverlapped は無視される。FILE_FLAG_OVERLAPPED フラグで hDevice を開いた場合、操作はオーバーラップ(非同期)操作として実行される。この場合、lpOverlapped はイベントオブジェクトへのハンドルを含む有効な OVERLAPPED 構造体を指していなければならない。そうでないと、関数は予測不能な方法で失敗する。オーバーラップ操作の場合、DeviceIoControl は即座に戻り、操作が完了するとイベントオブジェクトがシグナルされる。それ以外の場合、関数は操作が完了するかエラーが発生するまで戻らない。

(プラグイン / モジュール : kernel32.dll)

解説

指定したデバイスドライバに直接制御コードを送信し、対応するデバイスに対応する操作を実行させる。

[戻り値]
操作が正常に完了した場合、戻り値は 0 以外 (TRUE) である。操作が失敗または保留中の場合、戻り値は 0
となる。拡張エラー情報を取得するには GetLastError を呼ぶ。

[備考]
デバイスへのハンドルを取得するには、デバイス名またはデバイスに関連付けられたドライバ名で CreateFile
関数を呼び出す必要がある。デバイス名を指定するには次の形式を使用する: \\\\.\DeviceName。DeviceIoControl
は特定のデバイスへのハンドルを受け取ることができる。たとえば論理ドライブ A: へのハンドルを CreateFile で開くには
\\\\.\a: を指定する。あるいは \\\\.\PhysicalDrive0、\\\\.\PhysicalDrive1
などの名前を使ってシステム上の物理ドライブへのハンドルを開くこともできる。デバイスドライバへのハンドルを開くために CreateFile
を呼ぶときは FILE_SHARE_READ と FILE_SHARE_WRITE
アクセスフラグを指定すべきである。ただし、シリアルポートのような通信リソースを開くときは排他アクセスを指定する必要がある。デバイスハンドルを開く際、その他の
CreateFile パラメータは次のように使用する。
(以下省略)

情報

プラグイン / モジュールkernel32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の kernel32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_kernel32_gen2.hs