Forum: PC-Programmierung kennt sich jemand mit der Funktion ZwReadFile aus?


von Andree S. (meeloo134)


Lesenswert?

ich habe ein problem mit der funktion ZwReadFile! ( windows driver)


code:

////////////////////////////////////////////////////
////////////////////////////////////////////////////


NTSTATUS NtStatus = STATUS_SUCCESS;

UNICODE_STRING     uniName;
OBJECT_ATTRIBUTES  objAttr;
HANDLE   handle;
IO_STATUS_BLOCK    ioStatusBlock;
ULONGLONG buffer;

RtlInitUnicodeString(&uniName1, L"\\DosDevices\\C:\\test\\test.txt");
InitializeObjectAttributes(&objAttr, &uniName,
    OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
    NULL, NULL);

NtStatus = ZwCreateFile(&handle,
    GENERIC_READ,
    &objAttr, &ioStatusBlock,
    NULL,
    FILE_ATTRIBUTE_NORMAL,
    0,
    FILE_OPEN,
    FILE_SYNCHRONOUS_IO_NONALERT,
    NULL, 0);

if (NT_SUCCESS(NtStatus)) {

    ZwReadFile(handle1, NULL, NULL, NULL, &ioStatusBlock, &buffer, 8, 
NULL, NULL);

}
ZwClose(handle);
return 0;


////////////////////////////////////////////
///////////////////////////////////////////////

wenn ich es so mache ist mein ULONGLONG buffer falsch!! ich bekomme 
einfach nicht die werte die in meinem test.txt stehen!!!

aber waaaaarrrrruuuuummmmm ;) ich bin verzweifelt !! bitte helft mir !!

: Verschoben durch Moderator
von Sebastian L. (der_mechatroniker)


Lesenswert?

Was meinst du mit Werten, die in deinem text.txt stehen?

Stehen das Zahlen als Dezimalzahl in ASCII drin? Ich sehe nirgendwo, 
dass du versuchst, eine Zahl zu parsen.

von Andree S. (meeloo134)


Lesenswert?

dort steht eine hex zahl drin!!!!

die ich einer globalen variable übergeben will(&buffer)!!

was meinst du mit parsen???

kannst du mir n beispiel geben wie du es machen würdest??

thx

: Bearbeitet durch User
von Carl D. (jcw2)


Lesenswert?

Andree S. schrieb:
> dort steht eine hex zahl drin!!!!
>
> die ich einer globalen variable übergeben will(&buffer)!!
>
> was meinst du mit parsen???
>
> kannst du mir n beispiel geben wie du es machen würdest??
>
> thx

Was ist denn genau der Inhalt des Text Files?

von Andree S. (meeloo134)


Lesenswert?

0x12345

aber auch wenn ich dort eine dezimal zahl rein schreibe z.b 12345 und 
sie mir ausgeben lasse ist sie falsch!!

von Sebastian L. (der_mechatroniker)


Lesenswert?

Ein ULONGLONG ist 8 Byte lang, es müssen also mindestens 8 Byte in der 
Datei stehen, damit das funktioniert. Gib mal 8 Leerzeichen ein, dann 
müsste unabhängig von der Endianess der Wert 0x2020202020202020 (Dezimal 
‭2314885530818453536‬) in der Variablen landen.

Wenn das nicht das ist, was du brauchst, musst du halt noch an 
geeigneter Stelle konvertieren.

von Heinz V. (heinz_v)


Lesenswert?

Andree S. schrieb:
> NtStatus = ZwCreateFile(&handle,
>     GENERIC_READ,
>     &objAttr, &ioStatusBlock,
>     NULL,
>     FILE_ATTRIBUTE_NORMAL,
>     0,
>     FILE_OPEN,
>     FILE_SYNCHRONOUS_IO_NONALERT,
>     NULL, 0);
>
> if (NT_SUCCESS(NtStatus)) {
>
>     ZwReadFile(handle1, NULL, NULL, NULL, &ioStatusBlock, &buffer, 8,
> NULL, NULL);

Das handle das Dir ZwCreateFile übergibt, genau dieses musst Du in 
ZwReadFile benutzen, und kein anderes.

von S. R. (svenska)


Lesenswert?

Außerdem reichen einzelne Satzzeichen an der jeweils passenden Stelle. 
Du stellst dich auch nicht auf den Marktplatz und schreist einfach rum.

Ansonsten solltest du dich mit dem Unterschied zwischen Integern und 
Strings befassen. Eine Zahl (egal ob Hex oder Dezimal) in einer 
Textdatei ist nämlich kein Integer, sondern ein String.

von Andree S. (meeloo134)


Lesenswert?

Ja sry! habe mich verschrieben.

das handle in ZwCreateFile ist handle und nicht handle1.

aber trotzdem danke!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.