Uitgebreide kernelkenmerken
Vanaf Windows 8 ondersteunt NTFS uitgebreide kernelkenmerken (kernel-EA's). Het verifiëren van de handtekening van een afbeelding is een dure bewerking. Als u informatie opslaat over het feit of een eerder gevalideerd binair bestand is gewijzigd, vermindert u het aantal exemplaren waarin een afbeelding een volledige handtekeningcontrole moet ondergaan. Als u kernel-EA's gebruikt om deze reden, worden de prestaties van validatie van de handtekening van het afbeeldingsbestand verbeterd.
EA's met het naamvoorvoegsel $Kernel
kunnen alleen worden gewijzigd vanuit de kernelmodus. Elke EA die begint met deze reeks tekens wordt gezien als een Kernel EA. Voordat u het benodigde updatereeksnummer (USN) opvraagt, moet u eerst FSCTL_WRITE_USN_CLOSE_RECORD geven om eventuele in behandeling zijnde USN Journal-updates op het bestand door te voeren. Anders kan de FileUSN--waarde kort na het instellen van de Kernel EA worden gewijzigd.
Een Kernel EA moet ten minste de volgende informatie bevatten:
USN UsnJournalID
- Het veld UsnJournalID is een GUID die de huidige incarnatie van USN Journal File identificeert. Het USN-logboek kan per volume in de gebruikersmodus worden verwijderd en aangemaakt. Telkens wanneer het USN Journal wordt gemaakt, wordt er een nieuwe UsnJournalID GUID gegenereerd. Met dit veld kunt u zien of er een periode was waarin het USN-logboek is uitgeschakeld en opnieuw kan worden gevalideerd.
- Deze waarde kan worden opgehaald met behulp van FSCTL_QUERY_USN_JOURNAL.
- Het veld UsnJournalID is een GUID die de huidige incarnatie van USN Journal File identificeert. Het USN-logboek kan per volume in de gebruikersmodus worden verwijderd en aangemaakt. Telkens wanneer het USN Journal wordt gemaakt, wordt er een nieuwe UsnJournalID GUID gegenereerd. Met dit veld kunt u zien of er een periode was waarin het USN-logboek is uitgeschakeld en opnieuw kan worden gevalideerd.
USN FileUSN
- De FileUSN--waarde bevat de USN-id van de laatste wijziging die is aangebracht in het bestand en wordt bijgehouden in de MFT-record (Master File Table) voor het opgegeven bestand.
- Wanneer het USN-logboek wordt verwijderd, wordt FileUSN- opnieuw ingesteld op nul.
- De FileUSN--waarde bevat de USN-id van de laatste wijziging die is aangebracht in het bestand en wordt bijgehouden in de MFT-record (Master File Table) voor het opgegeven bestand.
Deze informatie wordt, samen met elk ander gebruik dat nodig is, vervolgens ingesteld op het bestand als kernel EA.
Een uitgebreid kernelkenmerk instellen
Als u een Kernel EA wilt instellen, moet deze beginnen met het voorvoegsel "$Kernel."
gevolgd door een geldige EA-naamtekenreeks.
Een poging om een Kernel EA in te stellen vanuit de gebruikersmodus wordt op de achtergrond genegeerd. De aanvraag retourneert STATUS_SUCCESS, maar er wordt geen daadwerkelijke EA-wijziging aangebracht.
Het aanroepen van een API zoals ZwSetEaFile of FltSetEaFile om een Kernel EA in te stellen vanuit de kernelmodus is niet voldoende omdat SMB het instellen van EA's via het netwerk toestaat. Wanneer een aanvraag voor het instellen van een EA via SMB wordt verzonden, wordt deze uitgegeven vanuit de kernelmodus op de server die de SMB-aanvraag verwerkt. Aanvragen via het netwerk zouden een Kernel EA lokaal onterecht kunnen instellen.
Als u een Kernel EA wilt instellen, moet de aanroeper ook de IRP_MN_KERNEL_CALL-waarde instellen in het veld MinorFunction van het IRP-aanvraagpakket (I/O-aanvraagpakket). Aangezien de enige manier om dit veld in te stellen is door een aangepastE IRP te genereren, is de routine FsRtlSetKernelEaFile de ondersteuningsfunctie voor het instellen van een Kernel EA.
Vanaf Windows 10 versie 1803 kunnen gebruikers-EA's en kernel-EA's worden gemengd. Als u een kernel EA instelt, wordt er geen USN_REASON_EA_CHANGE-record in het USN-journal gegenereerd. Het systeem genereert USN_REASON_EA_CHANGE wanneer gebruikers-EA's worden ingesteld.
Een query uitvoeren op een uitgebreid kenmerk
Als u een query uitvoert op de EA's in een bestand vanuit de gebruikersmodus, worden zowel normale als kernel-EA's geretourneerd. Ze worden teruggezet naar de gebruikersmodus om compatibiliteitsproblemen met toepassingen te minimaliseren. De normale ZwQueryEaFile en FltQueryEaFile bewerkingen retourneren zowel normale als kernel-EA's uit zowel gebruikers- als kernelmodi.
Wanneer er slechts een FileObject- beschikbaar is, kan het gebruik van FsRtlQueryKernelEaFile handiger zijn voor het uitvoeren van query's op kernel-EA's vanuit de kernelmodus.
Opvragen van informatie over het updatereeksnummerlogboek
De FSCTL_QUERY_USN_JOURNAL-bewerking vereist SE_MANAGE_VOLUME_PRIVILEGE zelfs wanneer deze wordt uitgegeven vanuit de kernelmodus, tenzij de IRP_MN_KERNEL_CALL waarde is ingesteld in het veld MinorFunction van de IRP. De routine FsRtlKernelFsControlFile maakt het eenvoudig mogelijk dat onderdelen in de kernelmodus deze USN-aanvraag uitgeven.
OPMERKING Vanaf Windows 10 versie 1703 en hoger is voor deze bewerking geen SE_MANAGE_VOLUME_PRIVILEGE meer vereist.
Automatisch verwijderen van uitgebreide kernelkenmerken
Het opnieuw scannen van een bestand vanwege een wijziging in de USN-id van het bestand kan duur zijn, omdat er veel goedaardige redenen zijn waarom een USN-update op het bestand kan worden toegepast. Om onnodige herscanning te voorkomen, is een functie voor het automatisch verwijderen van kernel-EA's toegevoegd aan NTFS.
Omdat niet alle kernel-EA's in dit scenario kunnen worden verwijderd, wordt een uitgebreide EA-voorvoegselnaam gebruikt. Als een Kernel EA begint met: "$Kernel.Purge."
, en een van de volgende USN-redenen wordt naar het USN-logboek geschreven, verwijdert NTFS alle kernel-EA's die in dat bestand bestaan en die voldoen aan de opgegeven naamgevingsyntaxis.
- USN_REDEN_DATA_OVERSCHRIJVEN
- USN_REASON_DATA_EXTEND
- USN_REASON_DATA_TRUNCATION
- USN_REASON_REPARSE_POINT_CHANGE
Deze verwijdering van kernel-EA's is zelfs in situaties met weinig geheugen geslaagd.
Opmerkingen
Onderdelen in de gebruikersmodus kunnen niet knoeien met kernel-EA's. Kernel-EA's kunnen bestaan in hetzelfde bestand als een normale EA.
Zie ook
FltQueryEaFile
FltSetEaFile
FSCTL_QUERY_USN_JOURNAL
FsRtlQueryKernelEaFileFsRtlSetKernelEaFile
ZwQueryEaFile
ZwSetEaFile