2 Stimmen

HANDLE - Datei-Handles und Verzeichnis-Handles-Strukturen

Sprache: C
Betriebssystem: Windows

Meine Anwendung ist mit nt-Ebene apis umrahmt und muss Datei und Verzeichnis-Handles zu manipulieren. Bei einer Zwopenfile- oder Zwcreate-Datei erhalte ich eine HANDLE als Ergebnis. Normalerweise werden die Werte für die HANDLE sind wie 0x00000024, 28,2c... usw. Wenn ich es als eine LPBYTE um den Inhalt anzuzeigen. Visual Studio zeigt "Ausdruck konnte nicht ausgewertet werden". Ich verstand daraus, dass die HANDLE die von create/open file apis zurückgegeben werden, sind keine Zeiger auf einen Speicherplatz. Windows verwendet jedoch den Wert und führt Dateivorgänge durch. Ntquerydirectory Objekt liefert mir die Informationen über Griffe. Wie Windows diese Funktionalität implementiert hat, ist jedoch unbekannt. Kann jemand Licht auf sie werfen.

4voto

sharptooth Punkte 162790

Das ist ein so genannter "undurchsichtiger Wert", was bedeutet, dass es Windows überlassen ist, wie es ihn in sich aufnimmt. Es könnte sich zum Beispiel um einen Index in einer globalen Tabelle handeln, auf die Ihr Programm nicht direkt zugreifen kann - Windows weiß einfach, wie man dorthin gelangt, und Sie sollten nicht einmal daran denken, dies zu tun.

2voto

plodoc Punkte 2713

Die Handles werden in einer Tabelle gespeichert, auf die nur der Kernel-Code Zugriff hat. Wenn Sie daran interessiert sind, wie der Windows-Kernel funktioniert, finden Sie Mark Russinovitch Blog o Treiberentwicklung interessant.

0voto

Chris Becke Punkte 32199

Das letzte Buch, das ich kenne, das ein gutes Nachschlagewerk für diese Art von Dingen war, war Innerhalb von Windows 2000 von Mark E. Russinovitch und David A. Solomon. Obwohl das Buch eindeutig veraltet ist, ist vieles davon immer noch relevant. Googeln Sie nach "Inside Windows 7", um Links zu Videos von Vorträgen von Russinovitch und einigen anderen Büchern zu finden, für die ich mich nicht verbürgen kann, die aber zum Thema zu gehören scheinen.

0voto

Grim Punkte 1132

HANDLE ist eigentlich ein Zeiger auf eine Struktur, die verschiedene Felder enthält, die oft auf ein Kernelobjekt zeigen. HANDLES werden im Allgemeinen bei der Programmierung in C verwendet, um eine Vorstellung von objektorientierter Programmierung zu haben.

Beim Debuggen mit WinDbg gibt es eine Erweiterung namens !handle, die verschiedene Informationen über ein bestimmtes Handle anzeigen kann.

Das Buch Windows Internals (von Mark Russinovich) geht sehr ausführlich auf diesen und viele andere Windows-Mechanismen ein.

Vielleicht finden Sie diese Diskussion nützlich: Was ist ein Windows-Griff?

Sehen Sie sich auch diesen Blogbeitrag von Mark an: http://blogs.technet.com/b/markrussinovich/archive/2009/09/29/3283844.aspx . Sie enthält viele Informationen, die Ihnen bei der Beantwortung Ihrer Frage helfen könnten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X