Mencari Teks untuk Nomor Kode Kesalahan

Terkadang perlu untuk menampilkan teks kesalahan yang terkait dengan kode kesalahan yang dikembalikan dari fungsi terkait jaringan. Anda mungkin perlu melakukan tugas ini dengan fungsi manajemen jaringan yang disediakan oleh sistem.

Teks kesalahan untuk pesan ini ditemukan dalam file tabel pesan bernama Netmsg.dll, yang ditemukan di %systemroot%\system32. File ini berisi pesan kesalahan dalam rentang NERR_BASE (2100) hingga MAX_NERR(NERR_BASE+899). Kode kesalahan ini didefinisikan dalam file header SDK lmerr.h.

Fungsi LoadLibrary dan LoadLibraryEx dapat memuat Netmsg.dll. Fungsi FormatMessage memetakan kode kesalahan ke teks pesan, mengingat handel modul ke file Netmsg.dll.

Contoh berikut menggambarkan cara menampilkan teks kesalahan yang terkait dengan fungsi manajemen jaringan, selain menampilkan teks kesalahan yang terkait dengan kode kesalahan terkait sistem. Jika nomor kesalahan yang disediakan berada dalam rentang tertentu, modul pesan netmsg.dll dimuat dan digunakan untuk mencari nomor kesalahan yang ditentukan dengan fungsi FormatMessage .

#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);
}

Setelah mengkompilasi program ini, Anda bisa memasukkan nomor kode galat sebagai argumen dan program akan menampilkan teks. Contohnya:

C:\> netmsg 2453
Could not find domain controller for this domain