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

📄 vpatchdll.c

📁 nsis是一个流传比较广的程序安装和解安装封装软件
💻 C
字号:
//---------------------------------------------------------------------------// vpatchdll.c: NSIS plug-in version of the VPatch runtime//---------------------------------------------------------------------------//                           -=* VPatch *=-//---------------------------------------------------------------------------// Copyright (C) 2001-2005 Koen van de Sande / Van de Sande Productions//---------------------------------------------------------------------------// Website: http://www.tibed.net/vpatch//// This software is provided 'as-is', without any express or implied// warranty.  In no event will the authors be held liable for any damages// arising from the use of this software.//// Permission is granted to anyone to use this software for any purpose,// including commercial applications, and to alter it and redistribute it// freely, subject to the following restrictions://// 1. The origin of this software must not be misrepresented; you must not//    claim that you wrote the original software. If you use this software//    in a product, an acknowledgment in the product documentation would be//    appreciated but is not required.// 2. Altered source versions must be plainly marked as such, and must not be//    misrepresented as being the original software.// 3. This notice may not be removed or altered from any source distribution.#define WIN32_LEAN_AND_MEAN#include <windows.h>#include "apply_patch.h"#include "checksum.h"#include "../../../ExDLL/exdll.h"/* ------------------------ Plug-in code ------------------------- */HINSTANCE g_hInstance;HWND g_hwndParent;  void __declspec(dllexport) vpatchfile(HWND hwndParent, int string_size,                                       char *variables, stack_t **stacktop) {  g_hwndParent=hwndParent;  EXDLL_INIT();  {    char source[MAX_PATH];    char dest[MAX_PATH];    char exename[MAX_PATH];    HANDLE hPatch, hSource, hDest;    int result;    popstring(exename);    popstring(source);    popstring(dest);    hPatch = CreateFile(exename, GENERIC_READ, FILE_SHARE_READ, NULL,                                        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);    if (hPatch == INVALID_HANDLE_VALUE) {      pushstring("Unable to open patch file");      return;    }    hSource = CreateFile(source, GENERIC_READ, FILE_SHARE_READ, NULL,                                        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);    if (hSource == INVALID_HANDLE_VALUE) {      CloseHandle(hPatch);      pushstring("Unable to open source file");      return;    }        hDest = CreateFile(dest, GENERIC_READ | GENERIC_WRITE, 0, NULL,                                    CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);    if (hDest == INVALID_HANDLE_VALUE) {      CloseHandle(hPatch);      CloseHandle(hSource);      pushstring("Unable to open output file");      return;    }            result = DoPatch(hPatch, hSource, hDest);    CloseHandle(hDest);    CloseHandle(hSource);    CloseHandle(hPatch);    if ((result != PATCH_SUCCESS)) {      if (result == PATCH_ERROR)        pushstring("An error occured while patching");      else if (result == PATCH_CORRUPT)        pushstring("Patch data is invalid or corrupt");      else if (result == PATCH_NOMATCH)        pushstring("No suitable patches were found");      else if (result == PATCH_UPTODATE)        pushstring("OK, new version already installed");      DeleteFile(dest);    } else {      pushstring("OK");    }    return;  }}#ifdef DLL_CHECKSUMSvoid __declspec(dllexport) GetFileCRC32(HWND hwndParent, int string_size,                                       char *variables, stack_t **stacktop) {  g_hwndParent=hwndParent;  EXDLL_INIT();  {    char filename[MAX_PATH];    char crc_string[9];    HANDLE hFile;    unsigned long crc;    popstring(filename);        hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, NULL,                                        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);    if (hFile == INVALID_HANDLE_VALUE) {      //pushstring("ERROR: Unable to open file for CRC32 calculation");      pushstring("");      return;    }    if (!FileCRC(hFile, &crc)) {      //pushstring("ERROR: Unable to calculate CRC32");      pushstring("");    } else {      crc_string[8] = '\0';      CRC32ToString(crc_string,crc);      pushstring(crc_string);    }    CloseHandle(hFile);  }}void __declspec(dllexport) GetFileMD5(HWND hwndParent, int string_size,                                       char *variables, stack_t **stacktop) {  g_hwndParent=hwndParent;  EXDLL_INIT();  {    char filename[MAX_PATH];    char md5_string[33];    HANDLE hFile;    md5_byte_t digest[16];    popstring(filename);        hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, NULL,                                        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);    if (hFile == INVALID_HANDLE_VALUE) {      //pushstring("ERROR: Unable to open file for MD5 calculation");      pushstring("");      return;    }    if (!FileMD5(hFile, digest)) {      //pushstring("ERROR: Unable to calculate MD5");      pushstring("");    } else {      md5_string[32] = '\0';      MD5ToString(md5_string,digest);      pushstring(md5_string);    }    CloseHandle(hFile);  }}#endifBOOL WINAPI DllMain(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved) {  g_hInstance=hInst;  return TRUE;}

⌨️ 快捷键说明

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