⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 w2k_img.c

📁 Undocumented Windows 2000 Secrets简体中文版.+源码光盘
💻 C
📖 第 1 页 / 共 5 页
字号:
            }
        if (j = imgPathCurrentW (awPath, MAX_PATH))
            {
            if (n = CallbackW (pwModule, awPath, j, pContext))
                return n;
            }
        i = 0;
        while ((j = imgPathVariableW (gawSymbolPath1,
                                      awPath, MAX_PATH, i++))
               != -1)
            {
            if (j)
                {
                if (n = CallbackW (pwModule, awPath, j, pContext))
                    return n;
                }
            }
        i = 0;
        while ((j = imgPathVariableW (gawSymbolPath2,
                                      awPath, MAX_PATH, i++))
               != -1)
            {
            if (j)
                {
                if (n = CallbackW (pwModule, awPath, j, pContext))
                    return n;
                }
            }
        if (j = imgPathWindowsW (awPath, MAX_PATH))
            {
            if (n = CallbackW (pwModule, awPath, j, pContext))
                return n;
            }
        n = CallbackW (pwModule, NULL, 0, pContext);
        }
    return n;
    }

// -----------------------------------------------------------------

DWORD WINAPI imgPathSymbolsA (PBYTE pbModule,   // NULL: ntoskrnl
                              PBYTE pbExtension,// NULL: .dbg
                              PBYTE pbPath,     // NULL: current dir
                              PBYTE pbBuffer,   // can be == pbPath
                              DWORD dBuffer,
                              BOOL  fSymbols)
    {
    BYTE  abBuffer [MAX_PATH];
    PBYTE pbModule1, pbExtension1, pbSymbols;
    DWORD dNext, dName, dExtension, n1, n2, n3, n4;
    DWORD n = 0;

    pbModule1    = (pbModule    != NULL ? pbModule    : gabKernel);
    pbExtension1 = (pbExtension != NULL ? pbExtension : gabDbg);
    pbSymbols    = (fSymbols            ? gabSymbols  : gabNull);

    dNext = imgPathCanonicalA (pbPath, abBuffer, MAX_PATH);
    dName = imgPathNameA (pbModule1, &dExtension);

    if (dNext && (pbModule1 [dExtension  ] == '.')
              &&  pbModule1 [dExtension+1]
        &&
        (dNext + (n1 = lstrlenA (pbSymbols))
               + (n2 = lstrlenA (pbModule1 + (dExtension+1))) + 1
               + (n3 = dExtension - dName)
               + (n4 = lstrlenA (pbExtension1))
         < MAX_PATH))
        {
        n = dNext;

        lstrcpyA (abBuffer + n, pbSymbols);
        n += n1;

        lstrcpyA (abBuffer + n, pbModule1 + (dExtension+1));
        n += n2;
        abBuffer [n++] = '\\';

        lstrcpynA (abBuffer + n, pbModule1 + dName, n3 + 1);
        n += n3;

        lstrcpyA (abBuffer + n, pbExtension1);
        n += n4;
        }
    if ((pbBuffer != NULL) && dBuffer)
        {
        if (n >= dBuffer) n = 0;
        abBuffer [n] = 0;
        lstrcpyA (pbBuffer, abBuffer);
        }
    return n;
    }

// -----------------------------------------------------------------

DWORD WINAPI imgPathSymbolsW (PWORD pwModule,   // NULL: ntoskrnl
                              PWORD pwExtension,// NULL: .dbg
                              PWORD pwPath,     // NULL: current dir
                              PWORD pwBuffer,   // can be == pwPath
                              DWORD dBuffer,
                              BOOL  fSymbols)
    {
    WORD  awBuffer [MAX_PATH];
    PWORD pwModule1, pwExtension1, pwSymbols;
    DWORD dNext, dName, dExtension, n1, n2, n3, n4;
    DWORD n = 0;

    pwModule1    = (pwModule    != NULL ? pwModule    : gawKernel);
    pwExtension1 = (pwExtension != NULL ? pwExtension : gawDbg);
    pwSymbols    = (fSymbols            ? gawSymbols  : gawNull);

    dNext = imgPathCanonicalW (pwPath, awBuffer, MAX_PATH);
    dName = imgPathNameW (pwModule1, &dExtension);

    if (dNext && (pwModule1 [dExtension  ] == '.')
              &&  pwModule1 [dExtension+1]
        &&
        (dNext + (n1 = lstrlenW (pwSymbols))
               + (n2 = lstrlenW (pwModule1 + (dExtension+1))) + 1
               + (n3 = dExtension - dName)
               + (n4 = lstrlenW (pwExtension1))
         < MAX_PATH))
        {
        n = dNext;

        lstrcpyW (awBuffer + n, pwSymbols);
        n += n1;

        lstrcpyW (awBuffer + n, pwModule1 + (dExtension+1));
        n += n2;
        awBuffer [n++] = '\\';

        lstrcpynW (awBuffer + n, pwModule1 + dName, n3 + 1);
        n += n3;

        lstrcpyW (awBuffer + n, pwExtension1);
        n += n4;
        }
    if ((pwBuffer != NULL) && dBuffer)
        {
        if (n >= dBuffer) n = 0;
        awBuffer [n] = 0;
        lstrcpyW (pwBuffer, awBuffer);
        }
    return n;
    }

// -----------------------------------------------------------------

DWORD CALLBACK imgPathCallbackA (PBYTE        pbModule,
                                 PBYTE        pbPath,
                                 DWORD        dPath,
                                 PIMG_CONTEXT pic)
    {
    BYTE  abBuffer [MAX_PATH];
    PBYTE pbBuffer, pbExtension;
    DWORD dBuffer;
    DWORD n = 0;

    if (pic != NULL)
        {
        pbExtension = pic->pbExtension;
        pbBuffer    = pic->pbBuffer;
        dBuffer     = pic->dBuffer;
        }
    else
        {
        pbExtension = NULL;
        pbBuffer    = NULL;
        dBuffer     = 0;
        }
    if (pbPath != NULL)
        {
        if (((n = imgPathSymbolsA (pbModule, pbExtension,
                                   pbPath, abBuffer, MAX_PATH,
                                   TRUE))
             &&
             imgFileTestA (abBuffer))
            ||
            ((n = imgPathSymbolsA (pbModule, pbExtension,
                                   pbPath, abBuffer, MAX_PATH,
                                   FALSE))
             &&
             imgFileTestA (abBuffer)))
            {
            if ((pbBuffer != NULL) && dBuffer)
                {
                if (n >= dBuffer)
                    {
                    abBuffer [0] = 0;
                    n = -1;
                    }
                lstrcpyA (pbBuffer, abBuffer);
                }
            }
        else
            {
            n = 0;
            }
        }
    else
        {
        if ((pbBuffer != NULL) && dBuffer) pbBuffer [0] = 0;
        }
    return n;
    }

// -----------------------------------------------------------------

DWORD CALLBACK imgPathCallbackW (PWORD        pwModule,
                                 PWORD        pwPath,
                                 DWORD        dPath,
                                 PIMG_CONTEXT pic)
    {
    WORD  awBuffer [MAX_PATH];
    PWORD pwBuffer, pwExtension;
    DWORD dBuffer;
    DWORD n = 0;

    if (pic != NULL)
        {
        pwExtension = pic->pwExtension;
        pwBuffer    = pic->pwBuffer;
        dBuffer     = pic->dBuffer;
        }
    else
        {
        pwExtension = NULL;
        pwBuffer    = NULL;
        dBuffer     = 0;
        }
    if (pwPath != NULL)
        {
        if (((n = imgPathSymbolsW (pwModule, pwExtension,
                                   pwPath, awBuffer, MAX_PATH,
                                   TRUE))
             &&
             imgFileTestW (awBuffer))
            ||
            ((n = imgPathSymbolsW (pwModule, pwExtension,
                                   pwPath, awBuffer, MAX_PATH,
                                   FALSE))
             &&
             imgFileTestW (awBuffer)))
            {
            if ((pwBuffer != NULL) && dBuffer)
                {
                if (n >= dBuffer)
                    {
                    awBuffer [0] = 0;
                    n = -1;
                    }
                lstrcpyW (pwBuffer, awBuffer);
                }
            }
        else
            {
            n = 0;
            }
        }
    else
        {
        if ((pwBuffer != NULL) && dBuffer) pwBuffer [0] = 0;
        }
    return n;
    }

// -----------------------------------------------------------------

DWORD WINAPI imgPathSymbolsExA (PBYTE pbModule,
                                PBYTE pbExtension,
                                PBYTE pbBuffer,
                                DWORD dBuffer)
    {
    IMG_CONTEXT ic;
    DWORD       n = 0;

    ic.pbExtension = pbExtension;
    ic.pbBuffer    = pbBuffer;
    ic.dBuffer     = dBuffer;

    n = imgPathEnumerateA (imgPathCallbackA, pbModule, &ic);
    return (n != -1 ? n : 0);
    }

// -----------------------------------------------------------------

DWORD WINAPI imgPathSymbolsExW (PWORD pwModule,
                                PWORD pwExtension,
                                PWORD pwBuffer,
                                DWORD dBuffer)
    {
    IMG_CONTEXT ic;
    DWORD       n = 0;

    ic.pwExtension = pwExtension;
    ic.pwBuffer    = pwBuffer;
    ic.dBuffer     = dBuffer;

    n = imgPathEnumerateW (imgPathCallbackW, pwModule, &ic);
    return (n != -1 ? n : 0);
    }

// -----------------------------------------------------------------

DWORD WINAPI imgPathDbgA (PBYTE pbModule,
                          PBYTE pbBuffer,
                          DWORD dBuffer)
    {
    return imgPathSymbolsExA (pbModule, gabDbg, pbBuffer, dBuffer);
    }

// -----------------------------------------------------------------

DWORD WINAPI imgPathDbgW (PWORD pwModule,
                          PWORD pwBuffer,
                          DWORD dBuffer)
    {
    return imgPathSymbolsExW (pwModule, gawDbg, pwBuffer, dBuffer);
    }

// -----------------------------------------------------------------

DWORD WINAPI imgPathPdbA (PBYTE pbModule,
                          PBYTE pbBuffer,
                          DWORD dBuffer)
    {
    return imgPathSymbolsExA (pbModule, gabPdb, pbBuffer, dBuffer);
    }

// -----------------------------------------------------------------

DWORD WINAPI imgPathPdbW (PWORD pwModule,
                          PWORD pwBuffer,
                          DWORD dBuffer)
    {
    return imgPathSymbolsExW (pwModule, gawPdb, pwBuffer, dBuffer);
    }

// =================================================================
// FILE MANAGEMENT
// =================================================================

HANDLE WINAPI imgFileClose (HANDLE hf)
    {
    if (hf != INVALID_HANDLE_VALUE) CloseHandle (hf);
    return INVALID_HANDLE_VALUE;
    }

// -----------------------------------------------------------------

HANDLE WINAPI imgFileOpenA (PBYTE pbPath)
    {
    HANDLE hf = INVALID_HANDLE_VALUE;

    if ((pbPath != NULL) && pbPath [0])
        {
        hf = CreateFileA (pbPath, GENERIC_READ,
                          FILE_SHARE_READ, NULL, OPEN_EXISTING,
                          FILE_FLAG_SEQUENTIAL_SCAN,
                          NULL);
        }
    return hf;
    }

// -----------------------------------------------------------------

HANDLE WINAPI imgFileOpenW (PWORD pwPath)
    {
    HANDLE hf = INVALID_HANDLE_VALUE;

    if ((pwPath != NULL) && pwPath [0])
        {
        hf = CreateFileW (pwPath, GENERIC_READ,
                          FILE_SHARE_READ, NULL, OPEN_EXISTING,
                          FILE_FLAG_SEQUENTIAL_SCAN,
                          NULL);
        }
    return hf;
    }

// -----------------------------------------------------------------

HANDLE WINAPI imgFileNewA (PBYTE pbPath)
    {
    HANDLE hf = INVALID_HANDLE_VALUE;

    if ((pbPath != NULL) && pbPath [0])
        {
        hf = CreateFileA (pbPath, GENERIC_READ | GENERIC_WRITE,
                          FILE_SHARE_READ, NULL, CREATE_ALWAYS,
                          FILE_FLAG_SEQUENTIAL_SCAN |
                          FILE_ATTRIBUTE_NORMAL,
                          NULL);
        }
    return hf;
    }

// -----------------------------------------------------------------

HANDLE WINAPI imgFileNewW (PWORD pwPath)
    {
    HANDLE hf = INVALID_HANDLE_VALUE;

    if ((pwPath != NULL) && pwPath [0])
        {
        hf = CreateFileW (pwPath, GENERIC_READ | GENERIC_WRITE,
                          FILE_SHARE_READ, NULL, CREATE_ALWAYS,
                          FILE_FLAG_SEQUENTIAL_SCAN |
                          FILE_ATTRIBUTE_NORMAL,
                          NULL);
        }
    return hf;
    }

// -----------------------------------------------------------------

BOOL WINAPI imgFileTestA (PBYTE pbPath)
    {
    HANDLE           hff;
    WIN32_FIND_DATAA wfd;
    BOOL             fOk = FALSE;

    if ((hff = FindFirstFileA (pbPath, &wfd))
        != INVALID_HANDLE_VALUE)
        {
        fOk = !(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY);
        FindClose (hff);
        }
    return fOk;
    }

// -----------------------------------------------------------------

BOOL WINAPI imgFileTestW (PWORD pwPath)
    {
    HANDLE           hff;
    WIN32_FIND_DATAW wfd;
    BOOL             fOk = FALSE;

    if ((hff = FindFirstFileW (pwPath, &wfd))
        != INVALID_HANDLE_VALUE)
        {
        fOk = !(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY);
        FindClose (hff);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -