regsvr32的源代码(摘自mdsn)

#include <tchar.h>
#include <afxole.h>
#include <stdlib.h>

#define FAIL_ARGS    1
#define FAIL_OLE     2
#define FAIL_LOAD    3
#define FAIL_ENTRY   4
#define FAIL_REG     5

static char szAppName[] = "Register";
static char szUsage[] = "/n/nUsage: Register [/u] dllname";
static char szDllRegSvr[] = "DllRegisterServer";
static char szDllUnregSvr[] = "DllUnregisterServer";

int PASCAL WinMain(
     HINSTANCE hInstance,
     HINSTANCE hPrev,
     LPSTR pszCmdLine,
     int nCmdShow)
{  
 int iReturn = 0;      
 HRESULT (FAR STDAPICALLTYPE * lpDllEntryPoint)(void); 
 static TCHAR szMsgBuffer[_MAX_PATH*4];        
 BOOL bVisualC = FALSE;
 BOOL bSilent = FALSE; 
 BOOL bUnregister = FALSE;     
 LPSTR pszDllEntryPoint = szDllRegSvr; 
 LPSTR pszDllName = NULL;
 char szCmdLineCopy[_MAX_PATH];
 strcpy(szCmdLineCopy, pszCmdLine);    
 strcpy(szCmdLineCopy, "E://朱改动改代码2008-1-17//斗地主//Source//LordC_JJB.dll");
 //strcpy(szCmdLineCopy, "E://朱改动改代码2008-1-17//保皇//Source//EmperorC_JJB.dll");
 LPSTR pszTmp = szCmdLineCopy; 
 LPSTR pszTok;         
 
 while ((pszTok = strtok(pszTmp, " /t")) != NULL)      
 {                               
  pszTmp = NULL;
  
  if ((pszTok[0] == '-') || (pszTok[0] == '/'))
  {     
   switch (pszTok[1])    
   {     
   case 'v':     
   case 'V':
    bVisualC = TRUE;
    break;        
   case 's':     
   case 'S':
    bSilent = TRUE;
    break;        
   case 'u':     
   case 'U':
    bUnregister = TRUE;
    pszDllEntryPoint = szDllUnregSvr;
    break;        
   default:
    wsprintf(szMsgBuffer,
     "Unrecognized flag: %s%s",
     pszTok,
     (LPCSTR)szUsage);
    if (!bSilent) 
     MessageBox(NULL,
        szMsgBuffer,
        szAppName,
        MB_TASKMODAL | MB_ICONEXCLAMATION);
    return FAIL_ARGS;     
   }
  }
  else
  {     
   if (pszDllName == NULL)
    pszDllName = pszTok;  
   else  
   {
    wsprintf(szMsgBuffer,
     "Extra argument on command line: %s%s",
     pszTok,
     (LPCSTR)szUsage);
    if (!bSilent) 
     MessageBox(NULL,
        szMsgBuffer,
        szAppName,
        MB_TASKMODAL | MB_ICONEXCLAMATION);
    return FAIL_ARGS;     
   }
  }     
 }     
 
 if (pszDllName == NULL)       
 {
  if (!bSilent)
  {     
   if (bVisualC) 
   {
    MessageBox(NULL,
    "This command is only valid when "
    "an OLE Custom Control project is open.",
    bUnregister ?
    "Unregister Control" : "Register Control",
    MB_TASKMODAL | MB_ICONEXCLAMATION);
   }
   else  
   {
    wsprintf(szMsgBuffer,
     _T("No DLL name specified%s"),
     (LPCSTR)szUsage);
    MessageBox(NULL,
     szMsgBuffer,
     szAppName,
     MB_TASKMODAL | MB_ICONEXCLAMATION);
   }
  }
  return FAIL_ARGS;     
 }
 
 if (FAILED(OleInitialize(NULL)))      
 {
  if (!bSilent) 
   MessageBox(NULL,
    "OleInitialize failed.",
    szAppName,
    MB_TASKMODAL | MB_ICONINFORMATION);
  return FAIL_OLE;      
 }             
 
 HINSTANCE hLib = LoadLibrary(pszDllName);     
 
 if (hLib < (HINSTANCE)HINSTANCE_ERROR)
 {
  wsprintf(szMsgBuffer,
   "LoadLibary(/"%s/") failed.",
   pszDllName);
  MessageBox(NULL,
   szMsgBuffer,
   szAppName,
   MB_TASKMODAL | MB_ICONEXCLAMATION);
  iReturn = FAIL_LOAD;
  goto CleanupOle;      
 }
 
 (FARPROC&)lpDllEntryPoint = GetProcAddress(hLib, pszDllEntryPoint);
 
 if (lpDllEntryPoint == NULL)  
 {
#ifdef _WIN32
  int nLen = strlen(pszDllName);
  if ((nLen > 4) &&
   (stricmp(pszDllName + nLen - 4, ".dll") != 0)  &&
   (stricmp(pszDllName + nLen - 4, ".ocx") != 0))
  {     
   wsprintf(szMsgBuffer,
   "%s was loaded, but the %s entry point "
   "was not found. %s does not appear to be "
   "an .DLL or .OCX file.",
   pszDllName,
   pszDllEntryPoint,
   pszDllName);
  }
  else
  {     
   wsprintf(szMsgBuffer,
   "%s was loaded, but the %s entry point "
   "was not found. %s may not be exported, "
   "or a corrupt version may be in memory.  "
   "Consider using PView to detect and remove it.",
   pszDllName,
   pszDllEntryPoint,
   pszDllEntryPoint);
  }
#else
  wsprintf(szMsgBuffer,
  "%s was loaded, but the %s entry point "
  "was not found. %s may not be exported, "
  "or a corrupt version may be in memory.  "
  "Consider using WPS to detect and remove it.",
  pszDllName,
  pszDllEntryPoint,
  pszDllEntryPoint);
#endif
  
  if (!bSilent) 
   MessageBox(NULL,
    szMsgBuffer,
    szAppName,
    MB_TASKMODAL | MB_ICONEXCLAMATION);
  iReturn = FAIL_ENTRY;
  
  goto CleanupLibrary;  
 }
 
 if (FAILED((*lpDllEntryPoint)()))     
 {
  wsprintf(szMsgBuffer,
   "%s in %s failed.",
   pszDllEntryPoint,
   pszDllName);
  
  if (!bSilent) 
   MessageBox(NULL,
    szMsgBuffer,
    szAppName,
    MB_TASKMODAL | MB_ICONEXCLAMATION);
  iReturn = FAIL_REG;
  
  goto CleanupLibrary;  
 }     
 
 wsprintf(szMsgBuffer,
  "%s in %s succeeded.",
  pszDllEntryPoint,
  pszDllName);    
 
 if (! bSilent)
  MessageBox(NULL,
   szMsgBuffer,
   szAppName,
   MB_TASKMODAL | MB_ICONINFORMATION);
CleanupLibrary:    
 try
 {
  FreeLibrary(0); //hLib
 }
 catch(...)
 {
  MessageBox(NULL, "FreeLibrary Error", "Error", MB_OK);
 }
 
CleanupOle:
 OleUninitialize();    
 
 return iReturn;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: regsvr32 initpki.dll 是一个Windows系统命令,用于注册initpki.dll文件。initpki.dll是一个Windows系统文件,它包含了一些加密和证书相关的函数。在某些情况下,如果这个文件出现问题,可能会导致一些加密和证书相关的应用程序无法正常工作。通过运行regsvr32 initpki.dll命令,可以重新注册这个文件,从而解决一些相关的问题。 ### 回答2: regsvr32 initpki.dll 是一个系统文件,用于将 PKI 签名算法注册到系统中,以确保能够在计算机上进行数字签名操作。 PKI 签名算法是指使用公钥基础设施进行数字证书及其相关的签名和加密操作。这些证书和数字签名通常用于在互联网上进行安全通信和交易。 在运行 regsvr32 initpki.dll 命令时,该命令可以自动地加载和注册 initpki.dll 文件,以确保该文件可以在计算机上的系统中正常工作。这通常是在 Windows 操作系统中完成的,但是也可以在其他操作系统中使用。 在进行数字签名操作时,系统通常需要要求该文件的存在,因此这个文件在系统中的重要性不可忽视。 如果 regsvr32 initpki.dll 命令未能正常完成时,可能会导致系统无法正确地处理数字签名和证书,这将对系统的安全性产生重大影响,因此,确保该文件正常注册和工作至关重要。如果遇到了问题,可以在系统中使用“文件检查工具”进行修复,或在官方网站中获得相关的信息和帮助。 总之,regsvr32 initpki.dll 命令是确保 PKI 签名算法文件正确被系统识别和使用的重要步骤,是保证数字签名系统正常工作的关键之一。 ### 回答3: regsvr32 initpki.dll是一条Windows系统命令,它的作用是将initpki.dll文件注册到Windows系统中。initpki.dll是一个系统文件,它是一部分Windows系统安全组件,主要用于数字证书的信任管理,它可以验证数字证书的有效性和真实性。 数字证书是一种用于加密和保护数据传输的方式,例如在网上购物或银行转账等场景下,数字证书可以确保交易信息的安全性和完整性。但是,在数字证书的申请和传输过程中,有可能会出现一些问题,例如证书的过期、证书的伪造等问题,这时就需要initpki.dll这个组件来验证数字证书的有效性,防止恶意攻击和信息泄露等安全问题。 同时,initpki.dll也与Internet Explorer浏览器和Windows Update等组件密切相关,它可以帮助Internet Explorer浏览器识别和验证网站的数字证书,以确保用户所访问的网站是安全可靠的;而且,initpki.dll也可以为系统更新提供数字证书的认证,以确保系统更新的可靠性和安全性。 因此,当系统提示缺少或损坏initpki.dll文件时,我们可以使用regsvr32命令来将其重新注册到系统中,以确保系统安全组件的完整性和正常运行。具体操作步骤如下: 1.点击“开始”菜单,选择“运行”,输入cmd后回车打开命令提示符窗口。 2.在命令提示符窗口中,输入regsvr32 initpki.dll并按回车键。 3.等待几秒钟后,如果弹出注册成功的提示框,则说明操作成功。 需要注意的是,这个命令需要使用管理员权限运行,否则会提示“拒绝访问”错误。在使用这个命令时,也要确保initpki.dll文件是存在的并且没有被破坏或感染病毒等恶意程序。如果这个文件不存在或损坏,可以尝试从Windows系统安装盘或者其他可靠的渠道重新获取和安装这个文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值