Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Czasami konieczne jest wyświetlenie tekstu błędu skojarzonego z kodami błędów zwracanymi z funkcji związanych z siecią. Może być konieczne wykonanie tego zadania za pomocą funkcji zarządzania siecią udostępnianych przez system.
Tekst błędu dla tych komunikatów znajduje się w pliku tabeli komunikatów o nazwie Netmsg.dll, który znajduje się w %systemroot%\system32. Ten plik zawiera komunikaty o błędach w zakresie NERR_BASE (2100) do MAX_NERR(NERR_BASE+899). Te kody błędów są zdefiniowane w pliku nagłówka zestawu SDK lmerr.h.
Funkcje LoadLibrary i LoadLibraryEx mogą ładować Netmsg.dll. Funkcja FormatMessage zamienia kod błędu na tekst komunikatu, korzystając z uchwytu modułu do pliku Netmsg.dll.
Poniższy przykład ilustruje sposób wyświetlania tekstu błędu skojarzonego z funkcjami zarządzania siecią, oprócz wyświetlania tekstu błędu skojarzonego z kodami błędów związanych z systemem. Jeśli podany numer błędu znajduje się w określonym zakresie, moduł komunikatu netmsg.dll zostanie załadowany i użyty do wyszukania określonego numeru błędu za pomocą funkcjiFormatMessage.
#include <windows.h>
#include <stdio.h>
#include <lmerr.h>
void
DisplayErrorText(
DWORD dwLastError
);
#define RTN_OK 0
#define RTN_USAGE 1
#define RTN_ERROR 13
int
__cdecl
main(
int argc,
char *argv[]
)
{
if(argc != 2) {
fprintf(stderr,"Usage: %s <error number>\n", argv[0]);
return RTN_USAGE;
}
DisplayErrorText( atoi(argv[1]) );
return RTN_OK;
}
void
DisplayErrorText(
DWORD dwLastError
)
{
HMODULE hModule = NULL; // default to system source
LPSTR MessageBuffer;
DWORD dwBufferLength;
DWORD dwFormatFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_IGNORE_INSERTS |
FORMAT_MESSAGE_FROM_SYSTEM ;
//
// If dwLastError is in the network range,
// load the message source.
//
if(dwLastError >= NERR_BASE && dwLastError <= MAX_NERR) {
hModule = LoadLibraryEx(
TEXT("netmsg.dll"),
NULL,
LOAD_LIBRARY_AS_DATAFILE
);
if(hModule != NULL)
dwFormatFlags |= FORMAT_MESSAGE_FROM_HMODULE;
}
//
// Call FormatMessage() to allow for message
// text to be acquired from the system
// or from the supplied module handle.
//
if(dwBufferLength = FormatMessageA(
dwFormatFlags,
hModule, // module to get message from (NULL == system)
dwLastError,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // default language
(LPSTR) &MessageBuffer,
0,
NULL
))
{
DWORD dwBytesWritten;
//
// Output message string on stderr.
//
WriteFile(
GetStdHandle(STD_ERROR_HANDLE),
MessageBuffer,
dwBufferLength,
&dwBytesWritten,
NULL
);
//
// Free the buffer allocated by the system.
//
LocalFree(MessageBuffer);
}
//
// If we loaded a message source, unload it.
//
if(hModule != NULL)
FreeLibrary(hModule);
}
Po skompilowaniu tego programu możesz wstawić numer kodu błędu jako argument, a program wyświetli tekst. Na przykład:
C:\> netmsg 2453
Could not find domain controller for this domain