Ist Null jemals ein gültiges Handle?

8

Es gibt eine SafeHandleZeroOrMinusOneIsInvalid -Klasse in .NET Framework sowie eine SafeHandleMinusOneIsInvalid -Klasse.

Warum ist das? In welchen Situationen ist Null jemals ein gültiges Handle?

    
Mehrdad 10.10.2011, 15:56
quelle

4 Antworten

6

Als zusätzlichen Vortrag zu den anderen Antworten finden Sie diesen OldNewThing Blog-Eintrag über inkonsistente Handle-Rückgabewerte.

    
MartinStettner 10.10.2011, 16:02
quelle
3

Ja. Zero ist Datei-Handle für Stdin. Nicht-Kernel-Handles sind nicht gültig, wenn Null.

    
Joshua 10.10.2011 15:57
quelle
3

Wie von Microsoft in ihrer Dokumentation dargelegt (und demonstriert in der Beschreibung von Joshua ,) ist es implementierungsabhängig, also zu sprechen:

  

Es beschreibt das Format eines ungültigen Handles.

     

Zum Beispiel einige   handles verwenden -1 als ungültigen Handle-Wert, andere verwenden 0 . Des Weiteren   Ableitungen dieser Klasse (z. B. Datei- oder Registrierungshandles) können   Spezialisieren Sie dies weiter . Ein Beispiel finden Sie in der SafeFileHandle-Klasse   einer Klasse, die von SafeHandleZeroOrMinusOneIsInvalid abgeleitet ist.

    
Grant Thomas 10.10.2011 16:00
quelle
1

Ich denke, Sie lesen zu viel in den Namen: Das bedeutet, dass einige APIs nach Konvention 0 zurückgeben, um Fehler anzuzeigen, andere geben -1 zurück. Für eine API, die -1 zurückgibt, bedeutet dies nicht, dass 0 jemals ein gültiger Handle sein wird, nur dass die API -1 zurückgibt, um einen Fehler anzuzeigen.

Es handelt sich also um den Wert, der normalerweise von einer API verwendet wird, um einen Fehler anzuzeigen. Es sagt nichts darüber aus, ob andere Handle-Werte für einen bestimmten Satz von APIs gültig sind oder nicht.

    
BrendanMcK 12.10.2011 20:42
quelle

Tags und Links