Deutsch
Forum

Dateiöffnen Probleme (Kernelmode)

 
Was mache ich hier falsch? (Windows2000/XP)
KompilierenMarkierenSeparieren
Def @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
 
27.10.2006  
 




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.
 
28.10.2006  
 




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.
 
28.10.2006  
 




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...
 
28.10.2006  
 



[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.
 
28.10.2006  
 



Dakannst du einiges von dem was hier steht vielleicht schon gebrauchen.
 
28.10.2006  
 




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  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

9.002 Betrachtungen

Unbenanntvor 0 min.
Setharial14.02.2013
Michael Borowiak17.12.2012

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie