Prijavite se pomoću Microsofta
Prijavi se ili izradi račun.
Zdravo,
Odaberite drugi račun.
Imate više računa
Odaberite račun putem kojeg se želite prijaviti.

UVOD

Ovaj članak opisuje kako otvoriti datoteku disk iz upravljački program za jezgreni način rada uređaj i kako čitanja ili pisanja u datoteku.

Dodatne informacije

Upućuje na datoteku prema njezinu nazivu objekta

Upravljački programi uređaja u jezgrenom načinu rada potražite datoteku prema njezinu nazivu objekta. Ovaj naziv je \DosDevices s puni put datoteke. Na primjer, naziv objekta C:\Windows\Example.txt datoteka je \DosDevices\C:\Windows\Example.txt. Zatim je naziv objekta encapsulated u OBJECT_ATTRIBUTES strukturu po pozivanje funkcije InitializeObjectAttributes . Napomena Ako upravljački program uređaja je ranije učitan, naziva \DosDevices možda još ne postoji. Stoga, \DosDevices prostora naziva nije dostupan upravljački program uređaja jer izložen nema slovo pogona. Samo dio datotečni sustav koji se zajamčeno dostupna je u prostoru naziva \SystemRoot . \SystemRoot prostor naziva mapirati u mapu u kojoj je instaliran sustav operaciju. Ako, na primjer, ova mapa možda C:\Windows ili D:\Winnt.The sljedeći primjer koda ilustrira kako pozvati datoteku prema njezinu nazivu objekta.

    UNICODE_STRING     uniName;    OBJECT_ATTRIBUTES  objAttr;    RtlInitUnicodeString(&uniName, L"\\DosDevices\\C:\\WINDOWS\\example.txt");  // or L"\\SystemRoot\\example.txt"    InitializeObjectAttributes(&objAttr, &uniName,                               OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,                               NULL, NULL);

Nabavite pokazivač datoteke

Da biste nabavili pokazivač datoteke, možete proslijediti OBJECT_ATTRIBUTES strukturu za funkciju ZwCreateFile . Parametar DesiredAccess možete postaviti na GENERIC_READ, GENERIC_WRITEili GENERIC_ALL, ovisno o tome što želite učiniti. Ako postavite parametar CreateOptionsFILE_SYNCHRONOUS_IO_NONALERT ili FILE_SYNCHRONOUS_IO_ALERT, datotečni sustav evidentira pomak trenutnog položaja datoteke. Stoga možete slijedno čitanje ili pisanje u datoteku kasnije. Uz to, možete pristupiti datoteci slučajni lokaciji. Sljedeći primjer koda prikazuje kako nabaviti pokazivač datoteke.

    HANDLE   handle;    NTSTATUS ntstatus;    IO_STATUS_BLOCK    ioStatusBlock;    // Do not try to perform any file operations at higher IRQL levels.    // Instead, you may use a work item or a system worker thread to perform file operations.    if(KeGetCurrentIrql() != PASSIVE_LEVEL)        return STATUS_INVALID_DEVICE_STATE;     ntstatus = ZwCreateFile(&handle,                            GENERIC_WRITE,                            &objAttr, &ioStatusBlock, NULL,                            FILE_ATTRIBUTE_NORMAL,                            0,                            FILE_OVERWRITE_IF,                             FILE_SYNCHRONOUS_IO_NONALERT,                            NULL, 0);

Čitanje iz ili pisanje u datoteku

Sada možete nazvati funkcija ZwReadFile ili funkcija ZwWriteFile . Kada završite s izmjenom datoteke, zatvorite držač korištenjem funkcije ZwClose . Sljedeći primjer koda prikazuje kako pisati u datoteku.

    #define  BUFFER_SIZE 30    CHAR     buffer[BUFFER_SIZE];    size_t  cb;    if(NT_SUCCESS(ntstatus)) {        ntstatus = RtlStringCbPrintfA(buffer, sizeof(buffer), "This is %d test\r\n", 0x0);    if(NT_SUCCESS(ntstatus)) {          ntstatus = RtlStringCbLengthA(buffer, sizeof(buffer), &cb);           if(NT_SUCCESS(ntstatus)) {                ntstatus = ZwWriteFile(handle, NULL, NULL, NULL, &ioStatusBlock,                 buffer, cb, NULL, NULL);           }    }        ZwClose(handle);    }

Sljedeći primjer koda prikazuje kako čitati iz datoteke.

    LARGE_INTEGER      byteOffset;    ntstatus = ZwCreateFile(&handle,                            GENERIC_READ,                            &objAttr, &ioStatusBlock,                            NULL,                            FILE_ATTRIBUTE_NORMAL,                            0,                            FILE_OPEN,                             FILE_SYNCHRONOUS_IO_NONALERT,                            NULL, 0);    if(NT_SUCCESS(ntstatus)) {        byteOffset.LowPart = byteOffset.HighPart = 0;        ntstatus = ZwReadFile(handle, NULL, NULL, NULL, &ioStatusBlock,                              buffer, BUFFER_SIZE, &byteOffset, NULL);        if(NT_SUCCESS(ntstatus)) {            buffer[BUFFER_SIZE-1] = '\0';            DbgPrint("%s\n", buffer);        }        ZwClose(handle);    }

Reference

Dodatne informacije o korištenju datoteka upravljačkog programa potražite "Pomoću datoteke u A upravljački program" sekcije razvoj Kit.For upravljački program Windows više o razvojnom paketu upravljačkih programa Windows, posjetite sljedeće Microsoftovo Web-mjesto:

http://www.microsoft.com/whdc/devtools/ddk/default.mspx

Potrebna vam je dodatna pomoć?

Želite dodatne mogućnosti?

Istražite pogodnosti pretplate, pregledajte tečajeve za obuku, saznajte kako zaštititi uređaj i još mnogo toga.

Zajednice vam pomažu da postavljate pitanja i odgovarate na njih, pošaljete povratne informacije i čujete se sa stručnjacima s bogatim znanjem.

Jesu li vam ove informacije bile korisne?

Koliko ste zadovoljni jezičnom kvalitetom?
Što je utjecalo na vaše iskustvo?
Ako pritisnete Pošalji, vaše će se povratne informacije iskoristiti za poboljšanje Microsoftovih proizvoda i usluga. Vaš će IT administrator moći prikupiti te podatke. Izjava o zaštiti privatnosti.

Hvala vam na povratnim informacijama!

×