2012年5月16日

【收藏】获取系统安装软件(vc++源码)

获取系统安装软件(vc++源码)

http://download.csdn.net/detail/yy_kici/2193865

 

typedef struct SetupSoftInfo
{
    mystring displayName;        //软件名称
    mystring publisher;            //发行商
    mystring displayVersion;    //版本
    mystring installDate;        //安装日期
    mystring uninstallString;    //卸载命令及参数
}*PSetupSoftInfo;

 

BOOL CNEPAction::GetSetupSofts(vector<SetupSoftInfo>&stupInfo)
{
    const int  MAX_LEG = 256 * sizeof(TCHAR);
    HKEY hKey;
    DWORD dwRegNum = MAX_LEG;
    TCHAR regBufferName[MAX_LEG] = {0};
    if( RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"),
        NULL, KEY_READ, &hKey) == ERROR_SUCCESS    ) {
        
        if( RegQueryInfoKey(hKey, NULL, NULL, NULL, &dwRegNum, NULL, NULL, NULL, NULL, NULL, NULL, NULL)    ==    ERROR_SUCCESS ){
            for( int i = 0; i < (int)dwRegNum; i++ ) {    
                DWORD dwRegSize = MAX_LEG;
                RegEnumKeyEx(hKey, i, regBufferName, &dwRegSize, NULL, NULL, 
                    NULL, NULL);
                DWORD dwType;    
                HKEY hSubKey;
                if(    RegOpenKeyEx(hKey, regBufferName, NULL, KEY_READ, &hSubKey) == ERROR_SUCCESS)
                {
                    SetupSoftInfo info;
                    TCHAR regBufferValue[MAX_LEG] = {0};
                    dwRegSize = MAX_LEG;
                    RegQueryValueEx(hSubKey, _T("DisplayName"), 0, &dwType, (LPBYTE)regBufferValue, &dwRegSize);
                    info.displayName = regBufferValue;        //软件名称

                    dwRegSize = MAX_LEG;
                    _tcscpy(regBufferValue,_T(""));
                    RegQueryValueEx(hSubKey, _T("Publisher"), 0, &dwType,(LPBYTE)regBufferValue, &dwRegSize);
                    info.publisher = regBufferValue;        //发行商

                    dwRegSize = MAX_LEG;
                    _tcscpy(regBufferValue,_T(""));
                    RegQueryValueEx(hSubKey, _T("DisplayVersion"), 0, &dwType, (LPBYTE)regBufferValue, &dwRegSize);
                    info.displayVersion = regBufferValue;    //版本

                    dwRegSize = MAX_LEG;
                    _tcscpy(regBufferValue,_T(""));
                    // 判断是否能在注册表中获取到安装时间, 否取子项创建时间
                    if(RegQueryValueEx(hSubKey, _T("InstallDate"), 0, &dwType, (LPBYTE)regBufferValue, &dwRegSize) == ERROR_SUCCESS )
                    {
                        info.installDate = regBufferValue;
                    }
                    else
                    {
                        FILETIME fileLastTime;
                        RegQueryInfoKey(hSubKey, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
                            NULL, NULL, NULL, &fileLastTime);
                        SYSTEMTIME sTime, stLocal ;
                        FileTimeToSystemTime(&fileLastTime,&sTime);
                        SystemTimeToTzSpecificLocalTime(NULL, &sTime, &stLocal);
                        TCHAR tchTime[MAX_LEG] = {0};
                        _stprintf(tchTime,_T("%d%02d%02d"),stLocal.wYear,stLocal.wMonth,stLocal.wDay);
                        info.installDate = tchTime;
                    }
                    dwRegSize = MAX_LEG;
                    _tcscpy(regBufferValue,_T(""));
                    RegQueryValueEx(hSubKey, _T("UninstallString"), 0, &dwType, (LPBYTE)regBufferValue, &dwRegSize);
                    info.uninstallString = regBufferValue;//卸载命令及参数

                    dwRegSize = MAX_LEG;
                    _tcscpy(regBufferValue,_T(""));
                    // 取ParentKeyName键值,判断是否是补丁信息, 是补丁信息键值为"OperatingSystem"
                    RegQueryValueEx(hSubKey, _T("ParentKeyName"), 0, &dwType, (LPBYTE)regBufferValue, &dwRegSize);
                    TCHAR tchLocal[MAX_LEG] = {0};
                    _tcscpy(tchLocal,regBufferValue);

                    _tcscpy(regBufferValue,_T(""));
                    dwRegSize = MAX_LEG;
                    RegQueryValueEx(hSubKey, _T("QuietUninstallString"), 0, &dwType, (LPBYTE)regBufferValue, &dwRegSize);
                    if( _tcscmp(regBufferValue,_T("") ) )
                    {
                        info.displayName = regBufferName;
                        info.uninstallString = regBufferValue;
                    }
                    if( (info.displayName != _T("") )
                        &&( _tcscmp( tchLocal,_T("OperatingSystem") ) )) //判断是否是补丁信息 
                    {
                        stupInfo.push_back(info);
                    }

                }             
            }//end for(; ;)
        }
    }else {
        return FALSE; //打开键失败
    }
    RegCloseKey(hKey);

    return TRUE;
}

posted @ 2012-05-16 13:39 大星星O 阅读(4) 评论(0) 编辑

2012年5月14日

三方控件收集

XGroupBox   http://www.codeproject.com/Articles/29016/XGroupBox-an-MFC-groupbox-control-to-display-text
Report control    http://www.codeproject.com/Articles/705/Report-control-an-Outlook-2000-style-SuperGrid-Rep

 

 

posted @ 2012-05-14 13:39 大星星O 阅读(3) 评论(0) 编辑

2012年5月7日

正确获取硬盘序列号源码

摘要: 参考:http://www.winsim.com/diskid32/diskid32.cpp// diskid32.cpp // for displaying the details of hard drives in a command window // 06/11/00 Lynn McGuire written with many contributions from others, // IDE drives only under Windows NT/2K and 9X, // ...阅读全文

posted @ 2012-05-07 19:01 大星星O 阅读(13) 评论(0) 编辑

2012年4月17日

VerifyFile验证文件签名

摘自金山pcmanager:http://code.ijinshan.com/trac/browser/pcmanager/src/publish/communits?order=name

功能只适用于2000和xp,win7下不行。

// testst.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <Windows.h>
#include <WinTrust.h>
#include <SoftPub.h>
//#pragma comment(lib, "WinTrust.lib")



#ifndef _VERIFY_FILE_INC_
#define _VERIFY_FILE_INC_
HANDLE  AcquireVerifyHandle();
void    ReleaseVerifyHandle(HANDLE hHandle);
// 返回 0 失败
// 返回 1 通过 win 签名
// 返回 2 通过 cat 签名
int     VerifyFile(HANDLE hHandle, LPCTSTR lpPath);
BOOL    IsVerifiedFile(LPCTSTR lpPath);
#endif /* _VERIFY_FILE_INC_ */


typedef HANDLE HCATADMIN;
typedef HANDLE HCATINFO;
typedef BOOL (WINAPI* PFN_CryptCATAdminAcquireContext)(HCATADMIN* phCatAdmin, const GUID* pgSubsystem, DWORD dwFlags);
typedef BOOL (WINAPI* PFN_CryptCATAdminReleaseContext)(HCATADMIN hCatAdmin, DWORD dwFlags);
typedef BOOL (WINAPI* PFN_CryptCATAdminCalcHashFromFileHandle)(HANDLE hFile, DWORD* pcbHash, BYTE* pbHash, DWORD dwFlags);
typedef HCATINFO (WINAPI* PFN_CryptCATAdminEnumCatalogFromHash)(HCATADMIN hCatAdmin, BYTE* pbHash, DWORD cbHash, DWORD dwFlags, HCATINFO* phPrevCatInfo );
typedef BOOL (WINAPI* PFN_CryptCATAdminReleaseCatalogContext)(HCATADMIN hCatAdmin, HCATINFO hCatInfo, DWORD dwFlags);
typedef LONG (WINAPI* PFN_WinVerifyTrust)(HWND hWnd, GUID* pgActionID, WINTRUST_DATA* pWinTrustData);
static PFN_CryptCATAdminAcquireContext __pfnCryptCATAdminAcquireContext = NULL;
static PFN_CryptCATAdminReleaseContext __pfnCryptCATAdminReleaseContext = NULL;
static PFN_CryptCATAdminCalcHashFromFileHandle __pfnCryptCATAdminCalcHashFromFileHandle = NULL;
static PFN_CryptCATAdminEnumCatalogFromHash __pfnCryptCATAdminEnumCatalogFromHash = NULL;
static PFN_CryptCATAdminReleaseCatalogContext __pfnCryptCATAdminReleaseCatalogContext = NULL;
static PFN_WinVerifyTrust __pfnWinVerifyTrust = NULL;
static int LoadWinTrustDll()
{
    static int nResult = 0;

    if ( nResult == 0 )
    {
        nResult = -1;
        HMODULE hModule = LoadLibraryW(SP_POLICY_PROVIDER_DLL_NAME);
        if ( hModule != NULL )
        {
            (FARPROC&)__pfnCryptCATAdminAcquireContext = GetProcAddress(hModule, "CryptCATAdminAcquireContext");
            if ( __pfnCryptCATAdminAcquireContext == NULL )
            {
                goto _Failed_Exit;
            }
            (FARPROC&)__pfnCryptCATAdminReleaseContext = GetProcAddress(hModule, "CryptCATAdminReleaseContext");
            if ( __pfnCryptCATAdminReleaseContext == NULL )
            {
                goto _Failed_Exit;
            }
            (FARPROC&)__pfnCryptCATAdminCalcHashFromFileHandle = GetProcAddress(hModule, "CryptCATAdminCalcHashFromFileHandle");
            if ( __pfnCryptCATAdminCalcHashFromFileHandle == NULL )
            {
                goto _Failed_Exit;
            }
            (FARPROC&)__pfnCryptCATAdminEnumCatalogFromHash = GetProcAddress(hModule, "CryptCATAdminEnumCatalogFromHash");
            if ( __pfnCryptCATAdminEnumCatalogFromHash == NULL )
            {
                goto _Failed_Exit;
            }
            (FARPROC&)__pfnCryptCATAdminReleaseCatalogContext = GetProcAddress(hModule, "CryptCATAdminReleaseCatalogContext");
            if ( __pfnCryptCATAdminReleaseCatalogContext == NULL )
            {
                goto _Failed_Exit;
            }
            (FARPROC&)__pfnWinVerifyTrust = GetProcAddress(hModule, "WinVerifyTrust");
            if ( __pfnWinVerifyTrust == NULL )
            {
                goto _Failed_Exit;
            }
            nResult = 1;
        }
_Failed_Exit:;
    }
    return nResult;
}
static BOOL CalcCatHash(LPCWSTR lpFileName, DWORD* pcbHash, BYTE** ppbHash)
{
    HANDLE hFile = CreateFileW(lpFileName, 
        GENERIC_READ,
        FILE_SHARE_READ,
        NULL,
        OPEN_EXISTING,
        0, 
        NULL
        );
    if ( hFile != INVALID_HANDLE_VALUE )
    {
        DWORD Err;
        LPBYTE Hash = NULL;
        DWORD HashSize = 0;

        //
        // Start out with a hash buffer size that should be large enough for
        // most requests.
        //
        HashSize = 100;

        do
        {
            Hash = (LPBYTE)LocalAlloc(LPTR, HashSize);

            if(!Hash)
            {
                Err = ERROR_NOT_ENOUGH_MEMORY;
                break;
            }

            if( __pfnCryptCATAdminCalcHashFromFileHandle(hFile, &HashSize, Hash, 0))
            {
                Err = NO_ERROR;
            }
            else
            {
                Err = GetLastError();

                //
                // If this API did screw up and not set last error, go ahead
                // and set something.
                //
                if(Err == NO_ERROR)
                {
                    Err = ERROR_INVALID_DATA;
                }

                LocalFree(Hash);

                if(Err != ERROR_INSUFFICIENT_BUFFER)
                {
                    //
                    // The API failed for some reason other than
                    // buffer-too-small.  We gotta bail.
                    //
                    Hash = NULL;  // reset this so we won't try to free it later
                    break;
                }
            }
        } while(Err != NO_ERROR);

        CloseHandle(hFile);
        if(Err == NO_ERROR)
        {
            *pcbHash = HashSize;
            *ppbHash = Hash;
            return TRUE;
        }
    }
    *pcbHash = 0;
    *ppbHash = NULL;
    return FALSE;
}
HANDLE  AcquireVerifyHandle()
{
    if ( LoadWinTrustDll() != 1 )
    {
        return NULL;
    }

    HANDLE hHandle = NULL;
    if ( __pfnCryptCATAdminAcquireContext(&hHandle, NULL, 0) )
    {
        return hHandle;
    }
    return NULL;
}
void ReleaseVerifyHandle(HANDLE hHandle)
{
    if ( LoadWinTrustDll() != 1 )
    {
        return ;
    }
    __pfnCryptCATAdminReleaseContext(hHandle, 0);
}
int VerifyFile(HANDLE hHandle, LPCTSTR lpPath)
{
    int nResult = 0;
    if ( LoadWinTrustDll() != 1 )
    {
        return 0;
    }
    WINTRUST_DATA wd = { 0 };
    WINTRUST_FILE_INFO wfi = { 0 };
    GUID guid = WINTRUST_ACTION_GENERIC_VERIFY_V2;

    wfi.cbStruct = sizeof(WINTRUST_FILE_INFO); 
    wfi.pcwszFilePath = lpPath; 

    wd.cbStruct = sizeof(WINTRUST_DATA);
    wd.dwUnionChoice = WTD_CHOICE_FILE;
    wd.pFile = &wfi;
    wd.dwUIChoice = WTD_UI_NONE;
    wd.fdwRevocationChecks = WTD_REVOKE_NONE;
    wd.dwStateAction = WTD_STATEACTION_AUTO_CACHE;
    wd.dwProvFlags = WTD_REVOCATION_CHECK_NONE;
    if ( __pfnWinVerifyTrust(NULL, &guid , &wd) == 0 ) // pe Ç©Ãû
    {
        MessageBox(0,_T("1"),0,0);
        nResult = 1;
    }
    else
    {
        if ( hHandle != NULL )
        {
            // cat Ç©Ãû
            LPBYTE lpHash;
            DWORD dwHashSize;

            if ( CalcCatHash(lpPath, &dwHashSize, &lpHash))
            {
                HANDLE hCatalogContext = __pfnCryptCATAdminEnumCatalogFromHash(hHandle, lpHash, dwHashSize, 0, NULL);
                if ( NULL != hCatalogContext)
                {
                    __pfnCryptCATAdminReleaseCatalogContext(hHandle, hCatalogContext, 0);
                    MessageBox(0,_T("2"),0,0);
                    nResult = 2;
                }

                LocalFree(lpHash);
                lpHash = NULL;
            }
        }
    }
    return nResult;
}
BOOL IsVerifiedFile(LPCTSTR lpPath)
{
    BOOL bResult = FALSE;

    HANDLE hHandle = AcquireVerifyHandle();
    if ( hHandle != NULL )
    {
        __try
        {
            // Ñé֤ǩÃûÒì³££¬±ÀÀ£ÔÚϵͳº¯ÊýÀïÃæ
            // ÔÝʱÎÞ·¨È·¶¨Ô­Òò
            if ( VerifyFile(hHandle, lpPath) != 0 )
            {
                bResult = TRUE;
            }
        }
        __except ( EXCEPTION_EXECUTE_HANDLER )
        {
        }

        ReleaseVerifyHandle(hHandle);
    }
    return bResult;
}

int _tmain(int argc, _TCHAR* argv[])
{
    IsVerifiedFile(_T("C:\\Windows\\System32\\kernel32.dll"));
    return 0;
}

posted @ 2012-04-17 15:48 大星星O 阅读(13) 评论(0) 编辑

2012年2月28日

【转】完美VMware虚拟机 + Mac OS X leopard下载


UPDATE: 不再推荐用VMware虚拟机使用 Mac OS leopard ,请下载 Kalyway_Leopard_10.5.2_DVD 刻盘后直接安装双系统,安装方法和种子见
http://www.21andy.com/blog/20080529/1140.html 请下载 Kalyway_Leopard_10.5.2_DVD_Intel_Amd.4122511.TPB.torrent 这个种子

完美VMware虚拟机 + Mac OS X leopard下载
 
中文名: 虚拟机完美体验苹果系统
英文名: Mac OS X leopard for VMware
PC装Mac讨论群号:45317607 期待你的加入!

苹果公司的操作系统只能在苹果机上安装,但是苹果机一般价格昂贵,不是一般人能接受,在苹果宣布支持intel CPU后,一些热心人就修改了系统,让它能支持在普通的PC机上安装,于是很多人都尝到了这个苹果,但是要在修改的Mac OS X系统也不能支持所有PC,所以很多人想在PC上尝试装苹果的总有面临这样那样的问题不能成功安装,对于安装老布成功又想体验Mac OS X的朋友,你们可要收藏好这个了,这个是在VMware 上装好的Leopard的文件,下载简单配置就可以进入体验了,实体机配置方面,没什么要求,intel AMD的机器能装Vista的配置都试试吧!系统内装好了QQ,需要更多软件的话,请自己进行下载安装;当然,这样做只是希望大家都能体验到苹果系统,对于安装老不成功的,推荐下载!

完美VMware虚拟机 + Mac OS X leopard下载 6f28c4f180c5d07e thumb
1.将下载的文件解压在一个NTFS分区,解压完后为7G,包含生成Leopard的文件和虚拟机VMware 6.5.2,然后点击Mac OS X Leopard.vmx,打开虚拟机leopard;

完美VMware虚拟机 + Mac OS X leopard下载 9dc526459984c22c thumb
2.点击“编辑虚拟机设置”进行相关的设置; 

完美VMware虚拟机 + Mac OS X leopard下载 8237fb607e90fee5 thumb
3.默认内存为默认内存为1024MB,可根据你本机的内存的一半设置,默认的CPU为2个,启动不了的换成一个试试,默认就可以上网的了,不需要设置; 

完美VMware虚拟机 + Mac OS X leopard下载 516804cb68925294 thumb
4.完成设置后点击“接通虚拟机电源”开始启动虚拟机; 

完美VMware虚拟机 + Mac OS X leopard下载 a0a510c6f2241b1b thumb
5.在弹出的窗口,点OK, 

完美VMware虚拟机 + Mac OS X leopard下载 45ca8d415f1840f6 thumb
6.Leopard开始启动;

完美VMware虚拟机 + Mac OS X leopard下载 6a25df1cbbb3bd29 thumb
7.一会就可进入桌面了, 

完美VMware虚拟机 + Mac OS X leopard下载 40f87cb60dbb27fa thumb
8.最后没问题的话,鼠标右键点击上面的虚拟机标签,把Leopard添加进收藏夹,这样就开始研究吧!

另附VMware 注册码:

FTJP4-A4Z6W-W0N4Z-4M9Q2
CTXKX-MUW4Y-YA4FZ-4MDN3
PJW6W-YFZ8Z-025FZ-4M8X7
RUN6H-82A8M-404DY-4WXX7
PJ0DW-P2MFJ-D8MDF-4PRXL
2CTK9-EDE6V-42J6A-4MDQL
3080T-W6A85-821FY-4YWZQ
A98UJ-PMCDP-4804Y-4W9Q3
H9DWR-J8267-00MDG-4M8X3
63XPE-AUD07-M0NDY-4YEZL

下载地址: (请使用电驴或迅雷)
[虚拟机完美体验].Mac.OS.X.Leopard.rar

posted @ 2012-02-28 15:45 大星星O 阅读(117) 评论(0) 编辑

2012年2月23日

Visual Studio 2010网剧全集

摘要: 一个热衷于code的developer,一个热衷于developer的女孩,他们将发生怎样的故事?第一集:想做你的Code第二集:让爱延长第三集:幸福也需要敏捷第四集:为爱Debug第五集:让爱编译通过阅读全文

posted @ 2012-02-23 15:24 大星星O 阅读(13) 评论(0) 编辑

2012年2月22日

PathRemoveFileSpec

摘要: http://technet.microsoft.com/zh-cn/magazine/bb773748(en-us,VS.85).aspxPathRemoveFileSpec functionRemoves the trailing file name and backslash from a path, if they are present.SyntaxBOOL PathRemoveFileSpec( __inoutLPTSTR pszPath);ParameterspszPath[in, out]Type:LPTSTRA pointer to a null-terminated st.阅读全文

posted @ 2012-02-22 17:42 大星星O 阅读(33) 评论(0) 编辑

【转】批处理安装INF文件

摘要: 命令行安装INF文件的格式:rundll32 syssetup,SetupInfObjectInstallAction DefaultInstall 128 INF文件的完全路径如:@echo offrundll32 syssetup,SetupInfObjectInstallAction DefaultInstall 128 C:\WINDOWS\inf\wsh.inf相关知识:使用.INF文件-制作安装的程序阅读全文

posted @ 2012-02-22 17:39 大星星O 阅读(29) 评论(0) 编辑

【转】游戏黑客亲述盗号全过程 揭露黑客产业链

摘要: 所有被盗过号的游戏玩家,都对黑客咬牙切齿,他让你损失的不仅是一个帐号,更是一套顶级装备,365天黑天摸地的练级,甚至是游戏中的荣耀。游戏黑客究竟是什么样的神秘人物,又是如何把你的帐号盗走,从中获得了多少的利益呢?今天一名匿名黑客将公布他的黑客生涯。匿名游戏黑客的自白我是一个黑客,今年25岁。我的四个伙伴,年龄都在20岁左右,标准的90后。我们目前匿身于中国与缅甸的边境,原因很简单,逃避法律打击。我们是在2008年从国内逃到缅甸的。当时,轰动江浙的“大小姐”病毒案东窗事发,十几个主犯当即被抓。我们几个伙伴被吓得不轻,连夜买火车票分头向外省逃跑,流窜数省之后,最终我们一起逃到缅甸,才算相对安全。现阅读全文

posted @ 2012-02-22 14:22 大星星O 阅读(13) 评论(0) 编辑

2012年2月21日

#pragma编译指令汇总

摘要: #pragmacheck_stack(off)#pragmacheck_stackstructsthecompilertoturnoffstackprobesifoff(or–)isspecified,ortoturnonstackprobesifon(or+)isspecified.#pragmacheck_stack([{on|off}])#pragmacheck_stack{+|–}RemarksIfnoargumentisgiven,stackprobesaretreatedaccordingtothedefault.Thispragmatakeseffectatthefirstfun阅读全文

posted @ 2012-02-21 10:30 大星星O 阅读(15) 评论(0) 编辑