FSCTL_RECALL_FILE IOCTL(winioctl.h)
계층적 스토리지 관리 소프트웨어인 원격 스토리지가 관리하는 스토리지 미디어에서 파일을 다시 호출합니다.
파일을 회수하려면 다음 매개 변수를 사용하여 DeviceIoControl 함수를 호출합니다.
BOOL DeviceIoControl(
(HANDLE) hDevice, // handle to file or directory
FSCTL_RECALL_FILE, // dwIoControlCode
NULL, // lpInBuffer
0, // nInBufferSize
NULL, // lpOutBuffer
0, // nOutBufferSize
(LPDWORD) lpBytesReturned, // number of bytes returned
(LPOVERLAPPED) lpOverlapped // OVERLAPPED structure
);
설명
FSCTL_RECALL_FILE 스토리지에서 파일(예: 원격 스토리지에서 관리되는 테이프)을 복구합니다. 파일이 이미 로컬로 캐시된 경우 이 작업은 아무 작업도 수행하지 않습니다. 마찬가지로 파일이 원격 스토리지로 이동되지 않은 경우 이 작업은 아무 작업도 수행하지 않습니다.
FSCTL_RECALL_FILE 원격 스토리지가 설치된 시스템에서만 작동합니다. 원격 스토리지가 설치되지 않은 경우 작업이 실패하고 GetLastError 는 ERROR_INVALID_FUNCTION 오류 코드를 반환합니다.
디렉터리를 원격 스토리지로 이동할 수 없습니다. 디렉터리에 대한 FSCTL_RECALL_FILE 호출하지 못하고 GetLastError 는 ERROR_INVALID_HANDLE 오류 코드를 반환합니다.
일반적으로 원격 스토리지에서 관리하는 미디어에 저장된 파일은 애플리케이션이 데이터에 대한 첫 번째 액세스를 시도할 때 회수됩니다. 데이터에 즉시 액세스하지 않고 파일을 여는 애플리케이션은 파일을 연 직후 FSCTL_RECALL_FILE 사용하여 첫 번째 액세스 속도를 높일 수 있습니다. 그러나 애플리케이션이 터치하지 않는 파일의 무차별 회수를 방지합니다.
FSCTL_RECALL_FILE 호출하기 전에 GetFileAttributes 함수를 사용하여 플래그 FILE_ATTRIBUTE_OFFLINE 대한 파일의 특성을 테스트할 필요가 없습니다. 온라인 파일이 이 작업의 영향을 받지 않으므로 테스트가 필요하지 않습니다. 그러나 운영 체제 호출에는 프로세서 시간이 걸립니다. 프로세서 시간을 절약하려면 GetFileAttributes를 호출하여 파일 특성을 검사 FSCTL_RECALL_FILE 필요한지 확인합니다.
이 작업에 겹치는 I/O의 의미는 DeviceIoControl 항목의 설명 섹션을 참조하세요.
Windows 8 및 Windows Server 2012 이 코드는 다음 기술에서 지원됩니다.
기술 | 지원됨 |
---|---|
SMB(서버 메시지 블록) 3.0 프로토콜 | No |
SMB 3.0 TFO(투명 장애 조치(failover)) | No |
SO(스케일 아웃 파일 공유)를 사용하는 SMB 3.0 | No |
CsvFS(클러스터 공유 볼륨 파일 시스템) | No |
ReFS(Resilient File System) | 예 |
예제
다음 코드 예제는 원격 스토리지에서 명령줄에 표시된 하나 이상의 파일을 회수하는 명령줄 유틸리티입니다.
#include <Windows.h>
#include <malloc.h>
#include <stdio.h>
#include <WinIoCtl.h>
DWORD RecallFile(PTCHAR FileName);
int _cdecl _tmain(int argc, TCHAR *argv[])
{
LONG i;
if (argc < 2) {
printf("Usage: recall <file-name1> <file-name2> ...\n");
return 1;
}
for (i = 1; i < argc; i++) {
(void) RecallFile((PTCHAR) argv[i]);
}
return 0;
}
DWORD RecallFile(IN PTCHAR FileName)
/*++
Routine Description
Recalls the file with the supplied path.
Arguments
FileName - Path of the file to be recalled
Return Value
0 - Recall is successful.
Any other value - Error code for the operation.
--*/
{
HANDLE fileHandle;
DWORD nbytes;
DWORD errorCode = 0;
fileHandle = CreateFile((LPCTSTR) FileName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (fileHandle == INVALID_HANDLE_VALUE)
{
errorCode = GetLastError();
printf("Couldn't open file %s: error %x\n", FileName,
errorCode);
return errorCode;
}
if (!DeviceIoControl(fileHandle,
FSCTL_RECALL_FILE,
NULL,
0,
NULL,
0,
&nbytes,
NULL))
{
errorCode = GetLastError();
printf("Couldn't recall file %s: error %x\n",
FileName, errorCode);
}
CloseHandle(fileHandle);
return errorCode;
}
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows XP [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱만 해당] |
머리글 | winioctl.h(Windows.h 포함) |