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]

不用于此操作;设置为零。

lpOutBuffer [out]

指向输出缓冲区的指针,即 SRV_REQUEST_RESUME_KEY 结构。 有关详细信息,请参见“备注”部分。

nOutBufferSize [in]

输出缓冲区的大小(以字节为单位)。

lpBytesReturned [out]

指向接收输出缓冲区中存储的数据大小的变量的指针,以字节为单位。

如果输出缓冲区太小,则调用失败, GetLastError 函数将返回 ERROR_INSUFFICIENT_BUFFERlpBytesReturned 为零。

如果 lpOverlapped 参数为 NULL则 lpBytesReturned 不能为 NULL。 即使操作不返回任何输出数据并且 lpOutBuffer 参数为 NULLDeviceIoControl 也使用 lpBytesReturned。 执行此类操作后, lpBytesReturned 的值毫无意义。

如果 lpOverlapped 不是 NULL则 lpBytesReturned 可以为 NULL。 如果 lpOverlapped 不是 NULL 且操作返回数据,则在重叠的操作完成之前 ,lpBytesReturned 毫无意义。 若要检索返回的字节数,请调用 GetOverlappedResult 函数。 如果 hDevice 参数与 I/O 完成端口相关联,则可以通过调用 GetQueuedCompletionStatus 函数来检索返回的字节数。

lpOverlapped [in]

指向 重叠 结构的指针。

如果在未指定FILE_FLAG_OVERLAPPED的情况下打开 hDevice 参数,则忽略 lpOverlapped

如果使用FILE_FLAG_OVERLAPPED标志打开 hDevice,则操作将作为重叠 (异步) 操作执行。 在这种情况下, lpOverlapped 必须指向包含事件对象的句柄的有效 OVERLAPPED 结构。 否则,函数会以不可预知的方式失败。

对于重叠的操作, DeviceIoControl 会立即返回,并在操作完成后发出事件对象信号。 否则,该函数不会在操作完成或发生错误之前返回。

返回值

如果操作成功完成, DeviceIoControl 将返回非零值。

如果操作失败或挂起, DeviceIoControl 将返回零。 要获得更多的错误信息,请调用 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
此成员保留供系统使用;不使用。
上下文
此成员保留供系统使用;不使用。

 

另请参阅

DeviceIoControl

IOCTL_COPYCHUNK