Zurückgeben von Werten an die MPR

Die Windows Netzwerkfunktionen geben bei Erfolg WN _ SUCCESS zurück, oder sie geben einen eindeutigen Wert ungleich 0 (null) zurück, wenn bei der Funktion ein Fehler auftritt. Darüber hinaus geben sie erweiterte Fehlerinformationen mithilfe von WNetSetLastError und SetLastErrorzurück.

Um das oben genannte Verhalten zu unterstützen, sollten Netzwerkanbieterfunktionen SetLastError nicht vor der Rückgabe aufrufen. Dies liegt daran, dass die MPR SetLastError für die Funktionen in der Netzwerkanbieter-API aufruft, nachdem sie zurückgegeben wurden. Wenn die Netzwerkanbieter SetLastError direkt aufrufen, werden redundante Funktionsaufrufe ausgeführt. Netzwerkanbieterfunktionen sollten einfach einen Fehlercode zurückgeben. Die Fehlercodes werden in der Funktionsbeschreibung oder in Rückgabewertenangegeben. Außerdem können Netzwerkanbieterfunktionen systemfehlercodeszurückgeben, z. B. unzureichenden Arbeitsspeicher. Die einzige Ausnahme ist NPGetCaps,die eine Maske zurückgeben sollte, die die vom Netzwerkanbieter unterstützten Funktionen angibt.

Wenn eine Netzwerkanbieterfunktion erweiterte Fehlerinformationen zurückgeben muss, sollte sie WNetSetLastErroraufrufen. Diese Funktion wird vom Windows Betriebssystem für die Verwendung durch Netzwerkanbieter bereitgestellt. Wenn der Anbieter WNetSetLastError aufruft, kann er eine Zeichenfolge mit zusätzlichen Informationen zum Fehler festlegen. Diese Informationen werden threadbezogen gespeichert. Dies entspricht SetLastError für Windows Anwendungen. Das Windows Betriebssystem ruft WNetSetLastError auf, um nach einer mit WNetSetLastError gespeicherten Zeichenfolge zu suchen, und gibt die erweiterten Fehlerinformationen an die aufrufende Anwendung zurück, die die Netzwerkanforderung initiiert hat.

Hinweis

Das WNet-Präfix von WNetSetLastError ist irreführend, da diese API im Gegensatz zu WNetSetLastError nicht Teil des Windows Netzwerk-API ist. WNetSetLastError ist nur für die Verwendung durch Netzwerkanbieter vorgesehen. Der Name WNetSetLastError wird aus Gründen der Kompatibilität mit vorhandenen Anbietern beibehalten.