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

📄 cspinstl.c

📁 微软出的CSPDK
💻 C
字号:
#undef UNICODE					// ## Not Yet
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <windows.h>
#include <wincrypt.h>

#define CSP_PROV	"CSP Provider"

CHAR szprovider[] = "SOFTWARE\\Microsoft\\Cryptography\\Defaults\\Provider\\CSP Provider";

CHAR szdef[] = "SOFTWARE\\Microsoft\\Cryptography\\Defaults\\Provider\\A Test Provider";

CHAR szcsp[] = "SOFTWARE\\Microsoft\\Cryptography\\Defaults\\Provider\\CSP Provider";

CHAR sztype[] = "SOFTWARE\\Microsoft\\Cryptography\\Defaults\\Provider Types\\Type 900";

CHAR szImagePath[] = "csp.dll";

DWORD     	    dwIgn;
HKEY      	    hKey;
DWORD           err;
DWORD           dwValue;
HANDLE          hFileSig;
DWORD     	    NumBytesRead;
DWORD           lpdwFileSizeHigh;
LPVOID          lpvAddress;    
DWORD           NumBytes;

int __cdecl main(int cArg, char *rgszArg[])
{
    //
    // Just to open scp.dll signature file.  This file was created by
    // sign.exe.
    //
    if ((hFileSig = CreateFile("cspsign",
                               GENERIC_READ, 0, NULL,
			       OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
			       0)) != INVALID_HANDLE_VALUE)
    {
        if ((NumBytes = GetFileSize((HANDLE) hFileSig, &lpdwFileSizeHigh)) ==
                                    0xffffffff)
        {
            printf("Install failed: Getting size of file cspsign: %x\n",
                    GetLastError());
            CloseHandle(hFileSig);
            return(FALSE);
        }

        if ((lpvAddress = VirtualAlloc(NULL, NumBytes, MEM_RESERVE |
		                                       MEM_COMMIT,
                                       PAGE_READWRITE)) == NULL)
        {
            CloseHandle(hFileSig);
            printf("Install failed: Alloc to read uisign: %x\n",
                    GetLastError());
            return(FALSE);
        }

        if (!ReadFile((HANDLE) hFileSig, lpvAddress, NumBytes,
		      &NumBytesRead, 0))
        {

            CloseHandle(hFileSig);
            printf("Install failed: Reading uisign: %x\n",
                    GetLastError());
            VirtualFree(lpvAddress, 0, MEM_RELEASE);
            return(FALSE);
        }

        CloseHandle(hFileSig);

        if (NumBytesRead != NumBytes)
        {
            printf("Install failed: Bytes read doesn't match file size\n");
            return(FALSE);
        }

	//
	// Create or open in local machine for provider:
	//
        if ((err = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
                                  (const char *) szprovider,
                                  0L, "", REG_OPTION_NON_VOLATILE,
                                  KEY_ALL_ACCESS, NULL, &hKey,
                                  &dwIgn)) != ERROR_SUCCESS)
        {
            printf("Install failed: RegCreateKeyEx\n");
        }

	//
	// Set Image path to: scp.dll
	//
        if ((err = RegSetValueEx(hKey, "Image Path", 0L, REG_SZ, szImagePath,
	                         strlen(szImagePath)+1)) != ERROR_SUCCESS)
        {
            printf("Install failed: Setting Image Path value\n");
            return(FALSE);
        }

	//
	// Set Type to: Type 900
	//
        dwValue = 900;
        if ((err = RegSetValueEx(hKey, "Type", 0L, REG_DWORD,
                                 (LPTSTR) &dwValue,
                                 sizeof(DWORD))) != ERROR_SUCCESS)
        {
            printf("Install failed: Setting Type value: %x\n", err);
            return(FALSE);
        }

	//
	// Place signature
	//
        if ((err = RegSetValueEx(hKey, "Signature", 0L, REG_BINARY, 
                                 (LPTSTR) lpvAddress,
                                 NumBytes)) != ERROR_SUCCESS)
        {
            printf("Install failed: Setting Signature value for cspsign: %x\n", err);
            return(FALSE);
        }

        RegCloseKey(hKey);
        VirtualFree(lpvAddress, 0, MEM_RELEASE);

	//
	// Create or open in local machine for provider type:
	// Type 900
	//
        if ((err = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
                                  (const char *) sztype,
                                  0L, "", REG_OPTION_NON_VOLATILE,
                                  KEY_ALL_ACCESS, NULL, &hKey,
                                  &dwIgn)) != ERROR_SUCCESS)
        {
            printf("Install failed: Registry entry existed: %x\n", err);
        }

        if ((err = RegSetValueEx(hKey, "Name", 0L, REG_SZ, CSP_PROV,
                                 strlen(CSP_PROV)+1)) != ERROR_SUCCESS)
        {
            printf("Install failed: Setting Default type: %x\n", err);
            return(FALSE);
        }

	printf("Installed: %s\n", szImagePath);

    }

    return(FALSE);

}

⌨️ 快捷键说明

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