다음을 통해 공유


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 원격 스토리지가 설치된 시스템에서만 작동합니다. 원격 스토리지가 설치되지 않은 경우 작업이 실패하고 GetLastErrorERROR_INVALID_FUNCTION 오류 코드를 반환합니다.

디렉터리를 원격 스토리지로 이동할 수 없습니다. 디렉터리에 대한 FSCTL_RECALL_FILE 호출하지 못하고 GetLastErrorERROR_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 포함)

추가 정보