| |
|
|
| Was mache ich hier falsch? (Windows2000/XP) KompilierenMarkierenSeparierenDef @RtlInitUnicodeString(2) !"NTDLL","RtlInitAnsiString"
Def @RtlInitUnicodeString(2) !"NTDLL","RtlInitUnicodeString"
Def @RtlAnsiStringToUnicodeString(3) !"NTDLL","RtlAnsiStringToUnicodeString"
DEF @LsaNtStatusToWinError(1) !"advapi32","LsaNtStatusToWinError"
DEF @FormatMessage(7) !"KERNEL32","FormatMessageA"
Def @RtlInitAnsiString(2) !"NTDLL","RtlInitAnsiString"
Def @ZwOpenFile(6) !"NTDLL","ZwOpenFile"
Def @ZwClose(1) !"NTDLL","ZwClose"
Declare LSA_Unicode#,ANSI$,Unicode#,Fehler&,Ansi#
Declare AHRückgabe&,AHGETERROR_Buffer#,AHGETERROR_Buffer$
Declare FileHandle&,Status_Block&,Object_Attributes#
Windowstyle 31
WindowTitle "Datei auslesen mit Kernelmode APIs"
Window 0,0-640,440
LET ANSI$="??"+"F:EigenesMister RootUnload.CLL" Pfad bitte anpassen
Dim Ansi#,8
DIM Unicode#,514
DIM LSA_Unicode#,8
WORD LSA_Unicode#,0=0
WORD LSA_Unicode#,2=512
LONG LSA_Unicode#,4=UNICODE#
@RtlInitAnsiString(Ansi#,@ADDR(ANSI$))
LET Fehler&=@RtlAnsiStringToUnicodeString(LSA_Unicode#,Ansi#,0)
LET AHRÜCKGABE&=@LsaNtStatusToWinError(Fehler&)
Fehlercode_bestimmen
PRINT AHGETERROR_Buffer$
Print @Char$(UNICODE#,0,@LEN(ANSI$)*2)
DIM Object_Attributes#,24
Clear Object_Attributes#
Long Object_Attributes#,0=24
Long Object_Attributes#,4=0
Long Object_Attributes#,8=LSA_Unicode#
Long Object_Attributes#,12=$40
LET FEHLER&=@ZwOpenFile(@ADDR(FileHandle&),$110003,Object_Attributes#,@ADDR(Status_Block&),$1,$800 | $20 | $2 | $8)
LET AHRÜCKGABE&=@LsaNtStatusToWinError(Fehler&)
Fehlercode_bestimmen
PRINT "ZwOpenFile: "+AHGETERROR_Buffer$
LET FEHLER&=@ZwClose(FileHandle&)
LET AHRÜCKGABE&=@LsaNtStatusToWinError(Fehler&)
Fehlercode_bestimmen
PRINT "ZwClose: "+AHGETERROR_Buffer$
Dispose Unicode#
Dispose LSA_Unicode#
While 0=0
Waitinput
wend
End
Proc Fehlercode_bestimmen
DIM AHGETERROR_Buffer#,32000
@FormatMessage($1000,0,AHRückgabe&,0,AHGETERROR_Buffer#,32000,0) Wandelt Fehlercode in Landesspezifische Message um.
Let AHGETERROR_Buffer$=@trim$(@STRING$(AHGETERROR_Buffer#,0))
Dispose AHGETERROR_Buffer#
Endproc
Gruß
Andreas |
|
|
| |
|
|
|
Michael Wodrich | ANSI$=??+F:EigenesMister RootUnload.CLLPfad bitte anpassen
2 oder 3 Fragezeichen? CLL statt DLL? |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 27.10.2006 ▲ |
|
|
|
|
| Ist nur irgendein Dateiname. Das ganze tut nichts anderes als die OpenFile API, nur tut sies auch im Kernel. Die Probleme entstehen bei mir beim Schließen des Hauptfensters. |
|
|
| |
|
|
|
Michael Wodrich | Und wie soll man erraten was falsch ist, wenn einfach irgendwas eingesetzt wird?
P.S.: Bei mir sagt er: Der Vorgang wurde erfolgreich beendet. Dann wird ein Unicodestring angezeigt (der Dateiname). Den sollte man vor der Anzeige umwandeln. |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 28.10.2006 ▲ |
|
|
|
|
| Setze da einfach mal irgeneinen (vorhandenen) dateinamen mit Pfad ein. Die Fragezeichen müssen bleiben. Zürückgeliefert wird in FileHandle& ein Handle auf die Datei. |
|
|
| |
|
|
|
Michael Wodrich | Alles liefert Null zurück. Ist das ein Fehler oder soll das Erfolg signalisieren???
ZwOpenFile aber nur ZwClose (ohne File)??? |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 28.10.2006 ▲ |
|
|
|
|
Michael Wodrich | [box:3dc1a1301e] ----------------------------------------------------- Samstag, der 28. Oktober 2006 - 00:52 ----------------------------------------------------- RtlAnsiStringToUnicodeString CODE:0 LsaNtStatusToWinError CODE:0 LsaNtStatusToWinError CODE:0 Der Vorgang wurde erfolgreich beendet. ??C:CodeWodMisterRoot.prf ZwOpenFile CODE:0 ZwOpenFile HANDLE: $88 ZwOpenFile STATUS: $0 LsaNtStatusToWinError CODE:0 LsaNtStatusToWinError CODE:0 ZwOpenFile: Der Vorgang wurde erfolgreich beendet. ZwClose CODE:0 LsaNtStatusToWinError CODE:0 LsaNtStatusToWinError CODE:0 ZwClose: Der Vorgang wurde erfolgreich beendet. [/box:3dc1a1301e] |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 28.10.2006 ▲ |
|
|
|
|
Michael Wodrich | Der eine Fehlercode ist immer doppelt, weil ich Umlauten im Variablennamen nicht traue - habe also einmal Kleinschrift und einmal Großschrift beim Variablennamen benutzt.
Tatsache ist: Der Code läuft durch (mit obigen Meldungen) und dann semmelt das Programm ab.
Die beiden zusätzlichen Dispose habe ich schon mit aufgenommen, daran liegt es nicht.
Ich kenne leider weder die genauen Aufrufparameter noch die in der Struktur erwarteten Werte, kann da also nicht weiterhelfen.
Schöne Grüße Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 28.10.2006 ▲ |
|
|
|
|
| Bei mir schwirrt der Code mit Zugriffsverletzung ebenfalls beim Schließen des Hauptfensters ab - läuft aber sonst alles ohne Probleme durch. Windows Bug oder Denkfehler? Das Problem scheint bei ZwOpenFile zu liegen. ZwClose scheint da auch am richtigen Platz zu sein - merkwürdig...
PS: 0=Erfolgsmeldung (NT_STATUS Codes).
Bin gerade bei den Vorbereitungen für meinen Treiber. Hab mich entschieden, doch über die Registry zu gehen, das ist sowieso besser. Ich schreib erst mal Kernelcode in Profan; den werde ich dann nacher in MASM umsetzen.
Wundere dich nicht über die APIs - das sind Native APIs - im Kernel gibts nichts anderes.
@IF: Was für einen Treiber willst du schreiben? Vielleicht kann man sich austauschen... |
|
|
| |
|
|
|
| [quote:1695c7078e]@IF: Was für einen Treiber willst du schreiben? Vielleicht kann man sich austauschen...[/quote:1695c7078e] Ich brauche etwas sehr einfaches - was aber vielleicht genau deshalb garnicht so einfach zu bewerkstelligen ist.
Einen Druckertreiber - der nicht Druckt - sondern die Datei des zu druckenden Dokumentes an eine Stelle im Netzwerk kopiert. |
|
|
| |
|
|
|
| Dakannst du einiges von dem was hier steht vielleicht schon gebrauchen. |
|
|
| |
|
|
|
Michael Wodrich | [quote:25b82596d4]Einen Druckertreiber - der nicht Druckt - sondern die Datei des zu druckenden Dokumentes an eine Stelle im Netzwerk kopiert.[/quote:25b82596d4] Es läßt sich aber doch jeder Druckertreiber so einstellen, das er in eine Datei druckt. Bei mir läuft das seit Jahr und Tag so (habe nämlich keinen Drucker).
Eingestellt ist ein Laserdrucker (Postscript). Die Datei wird dann anschließend mit einem Tool (WordToPdf) in eine PDF-Datei gewandelt.
Aus OpenOffice geht das natürlich einfacher, aber alle anderen Anwendungen erzeugen auf diese Art auch eine PDF.
Wenn ich dann wirklich mal einen Print davon brauche gehts mit der PDF ab zu Freunden...
Schöne Grüße Michael Wodrich
Hab mal schnell nachgesehen: Canon C LBP 460PS |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 28.10.2006 ▲ |
|
|
|