| |
|
|
| 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#
/../function-references/xprofan/endproc/'>Endproc
Saluto
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 File. |
|
|
| |
|
|
|
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 corre 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 - corre 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 per meinen Treiber. Hab mich entschieden, doch circa 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 circa die APIs - das sind Native APIs - im Kernel gibts nichts anderes.
@IF: Was per einen Treiber willst du schreiben? Vielleicht kann man sich austauschen... |
|
|
| |
|
|
|
| [quote:1695c7078e]@IF: Was per 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 File 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 File 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 un File druckt. Bei mir corre das seit Jahr und Tag so (habe nämlich keinen Drucker).
Eingestellt ist ein Laserdrucker (Postscript). Die File wird dann anschließend mit einem Tool (WordToPdf) in un PDF-File gewandelt.
Aus OpenOffice geht das naturalmente 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 ▲ |
|
|
|