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_BUFFER, lpBytesReturned 为零。
如果 lpOverlapped 参数为 NULL, 则 lpBytesReturned 不能为 NULL。 即使操作不返回任何输出数据并且 lpOutBuffer 参数为 NULL, DeviceIoControl 也使用 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 |
此成员保留供系统使用;不使用。 |
上下文 |
此成员保留供系统使用;不使用。 |
另请参阅