コントロール コードのFSCTL_SRV_REQUEST_RESUME_KEY
FSCTL_SRV_REQUEST_RESUME_KEY コントロール コードは、IOCTL_COPYCHUNK コントロール コードで使用する不透明なファイル参照を取得するために使用されます。
この操作を実行するには、次のパラメーターを使用して DeviceIoControl 関数を呼び出します。
BOOL DeviceIoControl(
(HANDLE) hDevice, // handle to device
FSCTL_SRV_REQUEST_RESUME_KEY, // dwIoControlCode
NULL, // lpInBuffer
0, // nInBufferSize
(LPVOID) lpOutBuffer, // output buffer
(DWORD) nOutBufferSize, // size of output buffer
(LPDWORD) lpBytesReturned, // number of bytes returned
(LPOVERLAPPED) lpOverlapped // OVERLAPPED structure
);
パラメーター
-
hDevice [in]
-
ソース ファイル キーが要求されるファイルへのハンドル。 このハンドルを取得するには、 CreateFile 関数を呼び出します。
-
dwIoControlCode [in]
-
操作の制御コード。 この操作 にはFSCTL_SRV_REQUEST_RESUME_KEY を使用します。
-
lpInBuffer
-
この操作では使用されません。NULL に設定 します。
-
nInBufferSize [in]
-
この操作では使用されません。0 に設定します。
-
lpOutBuffer [out]
-
出力バッファーへのポインター。 SRV_REQUEST_RESUME_KEY 構造体。 詳細については、「解説」を参照してください。
-
nOutBufferSize [in]
-
出力バッファーのサイズ (バイト単位)。
-
lpBytesReturned [out]
-
出力バッファーに格納されているデータのサイズをバイト単位で受け取る変数へのポインター。
出力バッファーが小さすぎる場合、呼び出しは失敗し、 GetLastError 関数は ERROR_INSUFFICIENT_BUFFERを返し、 lpBytesReturned は 0 です。
lpOverlapped パラメーターが NULL の場合、lpBytesReturned を NULL にすることはできません。 操作が出力データを返せず、 lpOutBuffer パラメーターが NULL の場合でも、 DeviceIoControl は lpBytesReturned を使用します。 このような操作の後、 lpBytesReturned の値は意味がありません。
lpOverlapped が NULL でない場合、lpBytesReturned は NULL にすることができます。 lpOverlapped が NULL ではなく、操作がデータを返す場合、重複する操作が完了するまで lpBytesReturned は意味がありません。 返されたバイト数を取得するには、 GetOverlappedResult 関数を呼び出します。 hDevice パラメーターが I/O 入力候補ポートに関連付けられている場合は、GetQueuedCompletionStatus 関数を呼び出して返されるバイト数を取得できます。
-
lpOverlapped [in]
-
OVERLAPPED 構造体へのポインター。
FILE_FLAG_OVERLAPPEDを指定せずに hDevice パラメーターを開いた場合、lpOverlapped は無視されます。
hDevice が FILE_FLAG_OVERLAPPED フラグで開かれた場合、操作は重複する (非同期) 操作として実行されます。 この場合、 lpOverlapped は、イベント オブジェクトへのハンドルを含む有効な OVERLAPPED 構造体を指す必要があります。 それ以外の場合、関数は予測できない方法で失敗します。
重複する操作の場合、 DeviceIoControl はすぐに返され、操作が完了するとイベント オブジェクトが通知されます。 それ以外の場合、操作が完了するまで、またはエラーが発生するまで、関数は戻りません。
戻り値
操作が正常に完了すると、 DeviceIoControl は 0 以外の値を返します。
操作が失敗した場合、または保留中の場合、 DeviceIoControl は 0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。
注釈
このコントロール コードには、関連付けられたヘッダー ファイルがありません。 制御コードとデータ構造は、次のように定義する必要があります。
#define FSCTL_SRV_REQUEST_RESUME_KEY CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
typedef struct _SRV_RESUME_KEY {
UINT64 ResumeKey;
UINT64 Timestamp;
UINT64 Pid;
} SRV_RESUME_KEY, *PSRV_RESUME_KEY;
typedef struct _SRV_REQUEST_RESUME_KEY {
SRV_RESUME_KEY Key;
ULONG ContextLength;
BYTE Context[1];
} SRV_REQUEST_RESUME_KEY, *PSRV_REQUEST_RESUME_KEY;
これらのメンバーは、次のように記述できます。
メンバー | 説明 |
---|---|
ResumeKey |
サーバーへのソース ファイルを識別する不透明な値。 |
タイムスタンプ |
ファイルが開かれた時刻を識別する不透明な値。 |
Pid |
ファイルを開いたプロセスを識別する不透明な値。 |
キー |
SRV_RESUME_KEY構造体。 サーバー側のコピー操作を実行するには、この構造体を IOCTL_COPYCHUNK コントロール コードと共 に 使用します。 |
ContextLength |
このメンバーは、システム用に予約されています。使用しないでください。 |
コンテキスト |
このメンバーは、システム用に予約されています。使用しないでください。 |
関連項目