파일 시스템 내에서 보안 검사의 또 다른 중요한 측면은 감사를 추가하는 것입니다(필요한 경우). 감사의 목적은 시스템에서 내린 보안 결정을 기록하는 것이므로 일반적으로 이 작업은 보안 결정을 내리는 동일한 루틴 집합의 일부로 수행됩니다. 예를 들어 다음 코드를 사용하여 액세스 검사를 완료한 후 파일 시스템 내에서 감사를 구현할 수 있습니다.
{
UNICODE_STRING FileAuditObjectName;
RtlInitUnicodeString(&FileAuditObjectName, L"File");
if ( SeAuditingFileOrGlobalEvents (AccessGranted,
&Fcb->SecurityDescriptor,
&AccessState->SubjectSecurityContext)) {
//
// Must pass complete Windows path name, including device name.
//
ConstructAuditFileName(Irp, Fcb, &AuditName);
if (IrpSp->Parameters.Create.SecurityContext->FullCreateOptions
& FILE_DELETE_ON_CLOSE) {
SeOpenObjectForDeleteAuditAlarm(&FileAuditObjectName,
NULL,
&AuditName,
&Fcb->SecurityDescriptor,
AccessState,
FALSE, // Object not created.
// Was it successful?
// Based on SeAccessCheck
SeAccessCheckAccessGranted,
// UserMode or KernelMode
EffectiveMode,
&AccessState->GenerateOnClose
);
} else {
SeOpenObjectAuditAlarm(&FileAuditObjectName,
NULL,
&AuditName,
&Fcb->SecurityDescriptor,
AccessState,
FALSE, // object not created
// Was it successful?
// Based on SeAccessCheck
AccessGranted,
// UserMode or KernelMode
EffectiveMode,
&AccessState->GenerateOnClose
);
}
//
// Free file name here if needed.
//
}