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

📄 w2k_wiz.c

📁 Undocumented Windows 2000 Secrets简体中文版.+源码光盘
💻 C
📖 第 1 页 / 共 2 页
字号:
    }

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

BOOL WINAPI FileEscape (HANDLE hf,
                        BYTE   bEscape)
    {
    BYTE  abData [] = "% ";
    PBYTE pbData    = abData;

    switch (abData [1] = bEscape)
        {
        case 'n': pbData = gabName;     break;
        case 'N': pbData = gabNameU;    break;
        case 's': pbData = gabSettings; break;

        case 'd': pbData = gabDay;      break;
        case 'm': pbData = gabMonth;    break;
        case 'y': pbData = gabYear;     break;

        case 't': pbData = gabText;     break;
        case 'c': pbData = gabCompany;  break;
        case 'a': pbData = gabAuthor;   break;
        case 'e': pbData = gabEmail;    break;
        case 'p': pbData = gabPrefix;   break;

        case 'i': pbData = gabInclude;  break;
        case 'l': pbData = gabFree;     break;
        case 'L': pbData = gabChecked;  break;
        }
    return FileWrite (hf, pbData, MAXDWORD);
    }

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

BOOL WINAPI FileCopy (PTBYTE ptSource,
                      PTBYTE ptTarget,
                      BOOL   fCustomize)
    {
    PBYTE  pbData;
    DWORD  dData, i, n;
    HANDLE hf;
    BOOL   fOk = FALSE;

    printf (gatLoading, ptSource);
    pbData = FileLoad (ptSource, &dData);
    printf (gatLine, (pbData != NULL ? gatOk : gatError));

    if (pbData != NULL)
        {
        printf (gatWriting, ptTarget);

        if ((hf = FileNew (ptTarget)) != INVALID_HANDLE_VALUE)
            {
            if (fCustomize)
                {
                for (n = i = 0; i < dData; i++)
                    {
                    if ((pbData [i] == '%') && (i+1 < dData))
                        {
                        if ((!FileWrite  (hf, pbData+n, (i++)-n)) ||
                            (!FileEscape (hf, pbData [i])))
                            break;

                        n = i+1;
                        }
                    }
                fOk = (i == dData) && FileWrite (hf, pbData+n, i-n);
                }
            else
                {
                fOk = FileWrite (hf, pbData, dData);
                }
            FileClose (hf);
            }
        printf (gatLine, (fOk ? gatOk : gatError));

        FileUnload (pbData);
        }
    return fOk;
    }

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

BOOL WINAPI FileCopyEx (PTBYTE ptFolder,
                        PTBYTE ptSource,
                        PTBYTE ptTarget,
                        BOOL   fCustomize)
    {
    TBYTE atSource [MAX_PATH];
    TBYTE atTarget [MAX_PATH];
    DWORD i, j, n;
    BOOL  fOk = FALSE;

    if ((ptFolder != NULL) &&
        (ptSource != NULL) && (ptTarget != NULL) &&
        (i = GetModuleFileName (NULL, atSource, MAX_PATH)))
        {
        while (i && (atSource [i-1] != '\\')
                 && (atSource [i-1] != ':' )
                 && (atSource [--i] != '.' ));

        if ((atSource [i] == '.') &&
            (i + lstrlen (ptSource) < MAX_PATH))
            {
            lstrcpy (atSource+i, ptSource);

            if (n = lstrlen (ptFolder))
                {
                i = j = n-1;

                while (i && (ptFolder [i-1] != '\\')
                         && (ptFolder [i-1] != ':' )) i--;

                if ((j -= i) &&
                    (n+j + lstrlen (ptTarget) < MAX_PATH))
                    {
                    lstrcpy  (atTarget,     ptFolder);
                    lstrcpyn (atTarget+n,   ptFolder+i, j+1);
                    lstrcpy  (atTarget+n+j, ptTarget);

                    fOk = FileCopy (atSource, atTarget, fCustomize);
                    }
                }
            }
        }
    return fOk;
    }

// =================================================================
// SETTINGS MANAGEMENT
// =================================================================

DWORD WINAPI SettingsFolder (PTBYTE ptRoot,
                             PTBYTE ptFolder,
                             PTBYTE ptBuffer,
                             DWORD  dBuffer)
    {
    TBYTE  atPath [MAX_PATH];
    PTBYTE ptFile;
    DWORD  i, j, k;
    DWORD  n = 0;

    if ((ptBuffer != NULL) && dBuffer)
        {
        i = 0;

        if ((ptFolder == NULL) || (!ptFolder [i]))
            {
            lstrcpyn (atPath, T("."), MAX_PATH);
            }
        else if (ptFolder [i] != '*')
            {
            lstrcpyn (atPath, ptFolder, MAX_PATH);
            }
        else
            {
            if (ptFolder [++i]                                &&
                ((ptFolder [i] != '\\') || ptFolder [++i])    &&
                (j = RegistryRead (ptRoot, atPath, MAX_PATH)) &&
                ((atPath [j-1] == '\\') || (++j < MAX_PATH))  &&
                (j + lstrlen (ptFolder+i) < MAX_PATH))
                {
                atPath [j-1] = '\\';
                lstrcpy (atPath+j, ptFolder+i);
                }
            else
                {
                atPath [0] = 0;
                }
            }
        if (atPath [0])
            {
            n = GetFullPathName (atPath, dBuffer, ptBuffer,
                                 &ptFile);
            }
        if (n && (n < MAX_PATH) &&
            ((ptBuffer [n-1] == '\\') || (++n < MAX_PATH)))
            {
            ptBuffer [n-1] = '\\';
            }
        else
            {
            n = 0;
            }
        i = j = (n ? n-1 : 0);

        while (i && (ptBuffer [i-1] != '\\')
                 && (ptBuffer [i-1] != ':' )) i--;

        if ((j-i) && (j-i < MAX_PATH))
            {
            for (k = 0; k < j-i; k++)
                {
                if (ptBuffer [i+k] < 0x0100)
                    {
                    gabName [k] = (BYTE) ptBuffer [i+k];
                    }
                else
                    {
                    sprintfA (gabName+k, "%C", ptBuffer [i+k]);
                    }
                }
            gabName [k] = 0;

            lstrcpyA   (gabNameU, gabName);
            CharUpperA (gabNameU);
            }
        ptBuffer [n] = 0;
        }
    return n;
    }

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

DWORD WINAPI SettingsValue (PBYTE pbKey,
                            PBYTE pbValue)
    {
    DWORD i;
    DWORD n = 0;

    if (pbValue != NULL)
        {
        if (pbKey != NULL)
            {
            GetPrivateProfileStringA ("Settings", pbKey, "",
                                      pbValue, N_VALUE,
                                      gabSettings);

            for (i = 0; pbValue [i] == ' '; i++);
            while (pbValue [i]) pbValue [n++] = pbValue [i++];
            while (n && (pbValue [n-1] == ' ')) n--;
            }
        pbValue [n] = 0;
        }
    return n;
    }

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

DWORD WINAPI SettingsLoad (PBYTE  pbExtension,
                           PTBYTE ptFolder,
                           PTBYTE ptBuffer,
                           DWORD  dBuffer)
    {
    BYTE       abRoot [N_VALUE];
    TBYTE      atRoot [N_VALUE];
    SYSTEMTIME st;
    DWORD      i;
    DWORD      n = 0;

    if ((ptBuffer != NULL) && dBuffer)
        {
        if ((pbExtension != NULL) &&
            (i = GetModuleFileNameA (NULL, gabSettings, MAX_PATH)))
            {
            while (i && (gabSettings [i-1] != '\\')
                     && (gabSettings [i-1] != ':' )
                     && (gabSettings [--i] != '.' ));

            if ((gabSettings [i] == '.') &&
                (i + lstrlenA (pbExtension) < MAX_PATH))
                {
                lstrcpyA (gabSettings+i, pbExtension);

                GetLocalTime (&st);

                sprintfA (gabDay,   "%02hu", st.wDay  );
                sprintfA (gabMonth, "%02hu", st.wMonth);
                sprintfA (gabYear,  "%04hu", st.wYear );

                if (SettingsValue ("Text",    gabText   ) &&
                    SettingsValue ("Company", gabCompany) &&
                    SettingsValue ("Author",  gabAuthor ) &&
                    SettingsValue ("Email",   gabEmail  ) &&
                    SettingsValue ("Prefix",  gabPrefix ) &&
                    SettingsValue ("Include", gabInclude) &&
                    SettingsValue ("Free",    gabFree   ) &&
                    SettingsValue ("Checked", gabChecked) &&
                    SettingsValue ("Root",     abRoot   ))
                    {
                    for (i = 0; i < N_VALUE; i++)
                        {
                        if (!(atRoot [i] = abRoot [i])) break;
                        }
                    n = SettingsFolder (atRoot, ptFolder,
                                        ptBuffer, dBuffer);
                    }
                }
            }
        ptBuffer [n] = 0;
        }
    return n;
    }

// =================================================================
// MAIN PROGRAM
// =================================================================

DWORD Main (DWORD argc, PTBYTE *argv, PTBYTE *argp)
    {
    TBYTE atFolder [MAX_PATH];

    printf (atAbout);

    if (argc < 2)
        {
        printf (atUsage, T("[*]<folder>"));
        }
    else
        {
        if (SettingsLoad (".ini", argv [1], atFolder, MAX_PATH))
            {
            printf (gatTarget, atFolder);

            FileCopyEx (atFolder, T(".tc"), T(".c"),   TRUE);
            FileCopyEx (atFolder, T(".td"), T(".def"), TRUE);
            FileCopyEx (atFolder, T(".th"), T(".h"),   TRUE);
            FileCopyEx (atFolder, T(".ti"), T(".ico"), FALSE);
            FileCopyEx (atFolder, T(".tp"), T(".dsp"), TRUE);
            FileCopyEx (atFolder, T(".tr"), T(".rc"),  TRUE);
            FileCopyEx (atFolder, T(".tw"), T(".dsw"), TRUE);
            }
        else
            {
            printf (gatAborted);
            }
        }
    return 0;
    }

// =================================================================
// END OF PROGRAM
// =================================================================

⌨️ 快捷键说明

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