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는 무시됩니다.
FILE_FLAG_OVERLAPPED 플래그를 사용하여 hDevice를 연 경우 작업이 겹치는(비동기) 작업으로 수행됩니다. 이 경우 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 |
이 멤버는 시스템 사용을 위해 예약되어 있습니다. 를 사용하지 마세요. |
컨텍스트 |
이 멤버는 시스템 사용을 위해 예약되어 있습니다. 를 사용하지 마세요. |
추가 정보