次の方法で共有


IOCTL_SFFDISK_DEVICE_COMMAND IOCTL (sffdisk.h)

ユーザー モード アプリケーションでは、この IOCTL を使用して、Secure Digital (SD) カード コマンドを SD カードに送信します。 これらのコマンドの説明については、「 SD メモリ カード パート 1 物理層仕様」および 「SD メモリ カード パート 3 セキュリティ 仕様」を参照してください。

呼び出し元は 、SFFDISK_DEVICE_COMMAND_DATA 構造体を入力し、それをパラメーターとして呼び出しに渡す必要があります。

この操作を実行するには、次のパラメーターを使用して DeviceIoControl 関数 (Microsoft Windows SDKドキュメントで説明) を呼び出します。

bRet = DeviceIoControl (
    (HANDLE)  hDevice, 
    (DWORD)  dwIoControlCode, 
    (PUCHAR)  lpInBuffer,
    (DWORD)  nInBufferSize, 
    (PUCHAR)  lpOutBuffer,
    (DWORD)  nOutBufferSize, 
    (LPDWORD)  lpBytesReturned,
    (LPOVERLAPPED)  lpOverlapped 
  );

パラメーター

hDevice
SD スタック内のボリュームへのハンドル。
dwIoControlCode
操作の制御コード。 この値は、実行する特定の操作と、実行するデバイスの種類を識別します。 この操作にはIOCTL_SFFDISK_DEVICE_COMMANDを使用します。
lpInBuffer
入力バッファーへのポインター。 呼び出し元は 、SFFDISK_DEVICE_COMMAND_DATA構造体を 初期化し、バッファーの先頭に格納する必要があります。 呼び出し元は、コマンドに関連付けられているパラメーターを、SFFDISK_DEVICE_COMMAND_DATA構造体の直後の場所に格納する必要があります。
nInBufferSize
lpInBuffer パラメーターが指す入力バッファーのサイズをバイト単位で示します。 入力バッファーのサイズは、 sizeof(SFFDISK_DEVICE_COMMAND_DATA) とそれに続くコマンド パラメーターのサイズの合計である必要があります。
lpOutBuffer
操作の結果を含む出力バッファーへのポインター。 操作が失敗し、 GetLastError が エラー コード ERROR_INSUFFICIENT_BUFFERを返した場合、出力バッファーは結果データを保持するのに十分な大きさではありません。
nOutBufferSize
lpOutBuffer パラメーターが指す出力バッファーのサイズ (バイト単位)。
lpBytesReturned
lpOutBuffer が指すバッファーに格納されている結果データのサイズ (バイト単位) を受け取る変数へのポインター。

出力バッファーが小さすぎて戻りデータを保持できない場合は、出力時に 0 の値が含まれます。呼び出しは失敗し、 GetLastError はエラー コード ERROR_INSUFFICIENT_BUFFERを返します。 大文字と小文字を区別します。

lpOverlappedNULL (非オーバーラップ I/O) の場合、呼び出し元は入力時に lpBytesReturned パラメーターに NULL を割り当てることができません。 lpOverlappedNULL (重複 I/O) でない場合、呼び出し元は lpBytesReturned パラメーターに NULL を割り当てることができます。

重複する操作の場合は、 GetOverlappedResult 関数を呼び出して返されるバイト数を取得できます。 hDevice が I/O 完了ポートに関連付けられている場合は、GetQueuedCompletionStatus 関数を呼び出すことによって返されるバイト数を取得できます。 GetOverlappedResult 関数と GetQueuedCompletionStatus 関数の説明については、Windows SDK のドキュメントを参照してください。

lpOverlapped
Windows SDK のドキュメントで説明されているように、OVERLAPPED 構造体へのポインター。

呼び出し元が FILE_FLAG_OVERLAPPED フラグを使用してデバイスを開いた場合、 lpOverlapped は有効な OVERLAPPED 構造体を指している必要があります。 この場合、システムは重複する非同期操作として DeviceIoControl を実行します。 呼び出し元が FILE_FLAG_OVERLAPPED フラグを使用してデバイスを開き、 lpOverlappedNULL の場合、関数は予期しない方法で失敗します。

呼び出し元がFILE_FLAG_OVERLAPPED フラグを指定せずにデバイスを開いた場合、システムは lpOverlapped の値を無視し、操作が完了するまで、またはエラーが発生するまで DeviceIoControl 関数は戻りません。

メジャー コード

IRP_MJ_DEVICE_CONTROL

ステータス ブロック

操作が成功した場合、 DeviceIoControl は 0 以外の値を返します。

操作が失敗した場合、 DeviceIoControl は 0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。

要件

要件
Header sffdisk.h (Sffdisk.h を含む)