USN_RECORD_V4 구조체(winioctl.h)
USN(업데이트 시퀀스 번호) 변경 저널 버전 4.0 레코드에 대한 정보를 포함합니다. 버전 2.0 및 3.0 레코드는 각각 USN_RECORD_V2(USN_RECORD라고도 함) 및 USN_RECORD_V3 구조로 정의됩니다.
구문
typedef struct {
USN_RECORD_COMMON_HEADER Header;
FILE_ID_128 FileReferenceNumber;
FILE_ID_128 ParentFileReferenceNumber;
USN Usn;
DWORD Reason;
DWORD SourceInfo;
DWORD RemainingExtents;
WORD NumberOfExtents;
WORD ExtentSize;
USN_RECORD_EXTENT Extents[1];
} USN_RECORD_V4, *PUSN_RECORD_V4;
멤버
Header
레코드의 레코드 길이, 주 버전 및 부 버전을 설명하는 USN_RECORD_COMMON_HEADER 구조체입니다.
FileReferenceNumber
이 레코드 노트가 변경되는 파일 또는 디렉터리의 128비트 서수입니다.
이 값은 저널 레코드를 파일과 연결하는 임의로 할당된 값입니다.
ParentFileReferenceNumber
이 레코드와 연결된 파일 또는 디렉터리가 있는 디렉터리의 128비트 서수입니다.
이 값은 저널 레코드를 부모 디렉터리에 연결하는 임의로 할당된 값입니다.
Usn
이 레코드의 USN입니다.
Reason
파일 또는 디렉터리가 열린 이후 이 파일 또는 디렉터리 저널 레코드에 누적된 변경 이유를 식별하는 플래그입니다.
파일 또는 디렉터리가 닫히면 USN_REASON_CLOSE 플래그 집합을 사용하여 최종 USN 레코드가 생성됩니다. 다음 변경(예: 다음 열린 작업 또는 삭제 후)은 새 이유 플래그 집합을 사용하여 새 레코드를 시작합니다.
이름 바꾸기 또는 이동 작업은 항목에 대한 이전 부모 디렉터리를 기록하는 레코드와 새 부모를 기록하는 두 개의 USN 레코드를 생성합니다.
다음 표에서는 가능한 플래그를 식별합니다.
SourceInfo
DeviceIoControl 작업의 FSCTL_MARK_HANDLE 설정되는 변경 원본에 대한 추가 정보입니다.
스레드가 새 USN 레코드를 작성할 때 스레드가 해당 플래그를 설정하는 경우에만 이전 레코드의 원본 정보 플래그가 계속 존재합니다. 따라서 원본 정보 구조를 사용하면 애플리케이션이 알려진 원본(예: 바이러스 백신 필터)에서만 설정된 USN 레코드를 필터링할 수 있습니다.
다음 값 중 하나를 설정할 수 있습니다.
RemainingExtents
현재 USN_RECORD_V4 레코드 다음에 남아 있는 익스텐트 수입니다. 지정된 파일에 대해 수정된 모든 익스텐트 설명에는 여러 버전 4.0 레코드가 필요할 수 있습니다. RemainingExtents 멤버가 0이면 현재 USN_RECORD_V4 레코드가 파일에 대한 마지막 USN_RECORD_V4 레코드입니다. 지정된 파일에 대한 마지막 USN_RECORD_V4 항목 뒤에는 항상 USN_REASON_CLOSE 플래그 집합이 있는 USN_RECORD_V3 레코드가 잇습니다.
NumberOfExtents
현재 USN_RECORD_V4 항목의 익스텐트 수입니다.
ExtentSize
Extents 멤버의 각 USN_RECORD_EXTENT 구조체 크기(바이트)입니다.
Extents[1]
USN_RECORD_V4 항목의 익스텐트를 나타내는 USN_RECORD_EXTENT 구조체의 배열입니다.
설명
USN_RECORD_V4 레코드는 범위 추적이 켜져 있고 파일 크기가 RangeTrackFileSizeThreshold 멤버의 값보다 크거나 같은 경우에만 출력됩니다. 사용자는 항상 하나 이상의 USN_RECORD_V4 레코드와 하나의 USN_RECORD_V3 레코드를 받습니다.
변경 저널 클라이언트에서 경로 전달 호환성을 제공하기 위해 Microsoft는 USN_RECORD_V4 구조에 변경 저널 소프트웨어의 주 버전 및 부 버전 번호를 제공합니다. 코드는 이러한 값을 검사하고, 변경 저널 소프트웨어와의 자체 호환성을 검사하고, 필요한 경우 비호환성을 정상적으로 처리해야 합니다.
부 버전 번호가 변경되면 기존 USN_RECORD_V4 구조체 멤버가 여전히 유효하지만 마지막 멤버와 가변 길이 문자열인 마지막 멤버 사이에 새 멤버가 추가되었을 수 있음을 나타냅니다.
이러한 변경을 정상적으로 처리하기 위해 코드는 마지막 멤버의 위치에 의존하는 컴파일 시간 포인터 산술 연산을 수행해서는 안 됩니다. 예를 들어 부 버전 번호를 변경하면 호출이 sizeof(USN_RECORD)
신뢰할 수 없게 됩니다. 대신 RecordLength 멤버를 사용하는 런타임 계산을 사용합니다.
변경 저널 소프트웨어의 주 버전 수가 증가하면 USN_RECORD_V4 구조가 크게 변경되었을 수 있으며 현재 정의가 신뢰할 수 없음을 나타냅니다. 코드가 변경 저널 소프트웨어의 주 버전 번호 변경을 감지하는 경우 코드는 변경 저널에서 작동하지 않아야 합니다.
자세한 내용은 변경 저널 만들기, 수정 및 삭제를 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 8.1 [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2012 R2 [데스크톱 앱만 해당] |
머리글 | winioctl.h(Windows.h 포함) |
추가 정보
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기