Windows 获取windows密码

#include <iostream>
#define Main main
#define COLOR_GREEN system("color 2");
#include <vector>
#include <list>
#include <string>
#include <WinSock2.h>
#include <WS2tcpip.h>
#include <memory>
#include <VersionHelpers.h>
#include <LM.h>
#include <winnetwk.h>
#include "BitMap.h"
#include <wlanapi.h>
#include "ATBAudioEngine/ATBAudioEngine.h"
#include "Package.h"

#pragma comment(lib,"Ws2_32.lib")
#pragma comment(lib,"Mpr.lib")
#pragma comment(lib,"netapi32.lib")
#pragma comment(lib,"Wlanapi.lib")
#include <Windows.h>

class disorderly
{
    int m_buf[10] = { 0 };
public:

    void initBuf()
    {
        srand(GetTickCount());
        int len = sizeof(m_buf) / sizeof(int);
        for (int i = 0; i < len; i++)
        {
            m_buf[i] = rand() % 100;
            printf("%d, ", m_buf[i]);
        }
    }

    //范围
    void initBuf(int range)
    {
        srand(GetTickCount());
        int len = sizeof(m_buf) / sizeof(int);
        for (int i = 0; i < len; i++)
        {
            m_buf[i] = rand() % range;
            printf("%d, ", m_buf[i]);
        }
    }

    int *getBuf() { return m_buf; }

    int getLen() { return sizeof(m_buf) / sizeof(int); }

    void print()
    {
        printf("\n");
        int len = sizeof(m_buf) / sizeof(int);
        for (int i = 0; i < len; i++)
        {
            printf("%d, ", m_buf[i]);
        }
        printf("\n");
    }

    void C(int *Arr, int Len)
    {
        int TempData = 0;
        int i = 0;
        int j = 0;
        for (i = 1; i < Len; i++)
        {
            j = i;
            TempData = *(Arr + i);
            //如果当前的数据小于当前数据的上一个
            //那么进行赋值, j--, 然后再判断j--数据是否小于上一个数据
            while (j > 0 && TempData < Arr[j - 1])
            {
                Arr[j] = Arr[j - 1];
                j--;
            }
            Arr[j] = TempData;
        }

        //for (int i = 0; i < 5; i++)
        //{
        //    std::thread th(C, i);
        //    th.join();
        //    //th.detch();
        //}
    }

    void M(int *Arr, int Len)
    {
        for (int i = 0; i < Len - 1; i++)
        {
            for (int j = i + 1; j < Len; j++)
            {
                if (Arr[i] > Arr[j])
                {
                    int temp = Arr[i];
                    Arr[i] = Arr[j];
                    Arr[j] = temp;
                }
            }
        }
    }

    void X(int *Arr, int Len)
    {
        int k = -1;
        for (int i = 0; i < Len - 1; i++)
        {
            k = i;
            for (int j = i + 1; j < Len; j++)
            {
                //第一波出来的必定是最小的
                if (Arr[k] > Arr[j])
                {
                    k = j;
                }
            }
            int temp = Arr[i];
            Arr[i] = Arr[k];
            Arr[k] = temp;
        }
    }

    void GetAllUserName(std::vector<std::wstring> & allUserName)
    {
        // See more: http://msdn.microsoft.com/en-us/library/windows/desktop/aa370652(v=vs.85).aspx
        LPUSER_INFO_1 pBuf = NULL;
        LPUSER_INFO_1 pTmpBuf;
        DWORD dwLevel = 1;
        DWORD dwEntriesRead = 0;
        DWORD dwTotalEntries = 0;
        DWORD dwResumeHandle = 0;
        DWORD dwPrefMaxLen = MAX_PREFERRED_LENGTH;
        NET_API_STATUS nStatus;
        LPTSTR pszServerName = NULL;

        do
        {
            nStatus = NetUserEnum((LPCWSTR)pszServerName,
                dwLevel,
                FILTER_NORMAL_ACCOUNT, // global users
                (LPBYTE*)&pBuf,
                dwPrefMaxLen,
                &dwEntriesRead,
                &dwTotalEntries,
                &dwResumeHandle);

            if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
            {
                if ((pTmpBuf = pBuf) != NULL)
                {
                    for (DWORD i = 0; i < dwEntriesRead; i++)
                    {
                        if (pTmpBuf == NULL)
                        {
                            fprintf(stderr, "An access violation has occurred\n");
                            break;
                        }
                        allUserName.push_back(pTmpBuf->usri1_name);
                        pTmpBuf++;
                    }
                }
            }
            else
                fprintf(stderr, "A system error has occurred: %d\n", nStatus);

            if (pBuf != NULL) {
                NetApiBufferFree(pBuf);
                pBuf = NULL;
            }
        } while (nStatus == ERROR_MORE_DATA); // end do

        // Check again for allocated memory.
        if (pBuf != NULL)
            NetApiBufferFree(pBuf);

        //std::vector<std::wstring> v;
        //GetAllUserName(v);
        //for (int i = 0; i < v.size(); i++)
        //{
        //    char buf[256] = { 0 };
        //    int j = 0;
        //    while (v[i].c_str()[j])
        //    {
        //        buf[j] = v[i].c_str()[j];
        //        j++;
        //    }
        //    printf(buf);
        //}
    }

    int getSystemPath()
    {
        HANDLE hFile;
        DWORD dwWrite;
        TCHAR path[MAX_PATH];
        GetSystemDirectory(path, MAX_PATH);
        hFile = CreateFile("syspath.txt", GENERIC_WRITE,
            0,
            NULL,
            CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        if (hFile != INVALID_HANDLE_VALUE)
        {
            if (!(WriteFile(hFile, path, lstrlen(path), &dwWrite, NULL)))
            {
                return GetLastError();
            }
        }
        return CloseHandle(hFile);
    }

    //打印环境变量
    void printEV()
    {
        PVOID P = GetEnvironmentStringsA();
        LPSTR sz;
        for (sz = (LPSTR)P; *sz;)
        {
            printf("%s\n", sz);
            while (*sz++);
        }
        FreeEnvironmentStringsA((LPCH)P);
        P = NULL;

    }

    void vectors()
    {
        std::vector<int> arr;
        srand(GetTickCount());
        for (unsigned int i = 0; i < 10; i++)
        {
            arr.push_back(rand() % 100);
        }
        for (unsigned int i = 0; i < arr.size(); i++)
        {
            printf("%d, ", arr[i]);
        }
        printf("\n");
        std::cout << "sort last" << std::endl;
        std::cout << "======================" << std::endl;
        unsigned int j = 0;
        int data = 0;
        for (unsigned int i = 1; i < arr.size(); i++)
        {
            j = i;
            data = arr[i];
            while (j > 0 && data < arr[j - 1])
            {
                arr[j] = arr[j - 1];
                j--;
            }
            arr[j] = data;
        }
        for (unsigned int i = 0; i < arr.size(); i++)
        {
            printf("%d, ", arr[i]);
        }
        printf("\n");
        arr.clear();
    }

    void ComputerName_Ip()
    {
        char buf[256] = "";
        hostent *ph = NULL;//struct hostent *ph = NULL;
        WSADATA w;
        WSAStartup(0x0101, &w);//这一行必须在使用任何SOCKET函数前写!
        std::string hostName = buf;//此处获得本机名称
        gethostname(buf, sizeof(buf));
        ph = gethostbyname(buf);
        int i = 0;
        while (ph->h_addr_list[i] != NULL)
        {
            char *IP = inet_ntoa(*((struct in_addr *)ph->h_addr_list[i]));//此处获得本机IP
            std::cout << IP << std::endl;
            i++;
        }
        ph = gethostbyname("www.baidu.com");
        i = 0;
        while (ph->h_addr_list[i] != NULL)
        {
            char *IP = inet_ntoa(*((struct in_addr *)ph->h_addr_list[i]));//此处获得本机IP
            std::cout << IP << std::endl;
            i++;
        }
        WSACleanup();
    }

    void gethostsIP(char *hostsbuf)
    {

        WORD wVersion;
        WSADATA WSAData;
        wVersion = MAKEWORD(2, 2);
        WSAStartup(wVersion, &WSAData);
        gethostname(hostsbuf, 256);
        addrinfo hints;
        struct addrinfo *res, *cur;
        int ret;
        struct sockaddr_in *addr;
        char m_ipaddr[16];

        memset(&hints, 0, sizeof(struct addrinfo));
        hints.ai_family = AF_INET;     /* Allow IPv4 */
        hints.ai_flags = AI_PASSIVE;/* For wildcard IP address */
        hints.ai_protocol = 0;         /* Any protocol */
        hints.ai_socktype = SOCK_STREAM;

        ret = getaddrinfo(hostsbuf, NULL, &hints, &res);

        if (ret == -1)
        {
            perror("getaddrinfo");
            exit(1);
        }
        for (cur = res; cur != NULL; cur = cur->ai_next)
        {
            addr = (struct sockaddr_in *)cur->ai_addr;
            sprintf_s(m_ipaddr, "%d.%d.%d.%d",
                (*addr).sin_addr.S_un.S_un_b.s_b1,
                (*addr).sin_addr.S_un.S_un_b.s_b2,
                (*addr).sin_addr.S_un.S_un_b.s_b3,
                (*addr).sin_addr.S_un.S_un_b.s_b4);
            printf("%s\n", m_ipaddr);
        }
        freeaddrinfo(res);
        WSACleanup();
    }

    void gethostsIP(const char *hostsName)
    {

        WORD wVersion;
        WSADATA WSAData;
        wVersion = MAKEWORD(2, 2);
        WSAStartup(wVersion, &WSAData);
        addrinfo hints;
        struct addrinfo *res, *cur;
        int ret;
        struct sockaddr_in *addr;
        char m_ipaddr[16];

        memset(&hints, 0, sizeof(struct addrinfo));
        hints.ai_family = AF_INET;     /* Allow IPv4 */
        hints.ai_flags = AI_PASSIVE;/* For wildcard IP address */
        hints.ai_protocol = 0;         /* Any protocol */
        hints.ai_socktype = SOCK_STREAM;

        ret = getaddrinfo(hostsName, NULL, &hints, &res);

        if (ret == -1)
        {
            perror("getaddrinfo");
            exit(1);
        }
        for (cur = res; cur != NULL; cur = cur->ai_next)
        {
            addr = (struct sockaddr_in *)cur->ai_addr;
            sprintf_s(m_ipaddr, "%d.%d.%d.%d",
                (*addr).sin_addr.S_un.S_un_b.s_b1,
                (*addr).sin_addr.S_un.S_un_b.s_b2,
                (*addr).sin_addr.S_un.S_un_b.s_b3,
                (*addr).sin_addr.S_un.S_un_b.s_b4);
            printf("%s\n", m_ipaddr);
        }
        freeaddrinfo(res);
        res = NULL;
        WSACleanup();
    }

    //无线连接状态  
    int intlistenStatus()
    {
        HANDLE hClient = NULL;
        DWORD dwMaxClient = 2;
        DWORD dwCurVersion = 0;
        DWORD dwResult = 0;
        int iRet = 0;
        WCHAR GuidString[39] = { 0 };
        //ListenthestatusoftheAPyouconnected.  
        while (1)
        {
            Sleep(5000);
            PWLAN_INTERFACE_INFO_LIST pIfList = NULL;
            PWLAN_INTERFACE_INFO pIfInfo = NULL;

            dwResult = WlanOpenHandle(dwMaxClient, NULL, &dwCurVersion, &hClient);
            if (dwResult != ERROR_SUCCESS)
            {
                wprintf(L"WlanOpenHandlefailedwitherror:%u\n", dwResult);
                return 1;
            }
            //获取无线网卡列表  
            dwResult = WlanEnumInterfaces(hClient, NULL, &pIfList);
            if (dwResult != ERROR_SUCCESS)
            {
                wprintf(L"WlanEnumInterfacesfailedwitherror:%u\n", dwResult);
                return 1;
            }
            else
            {
                wprintf(L"NumEntries:%lu\n", pIfList->dwNumberOfItems);
                wprintf(L"CurrentIndex:%lu\n\n", pIfList->dwIndex);
                int i;
                for (i = 0; i < (int)pIfList->dwNumberOfItems; i++)
                {
                    pIfInfo = (WLAN_INTERFACE_INFO*)&pIfList->InterfaceInfo[i];
                    wprintf(L"InterfaceIndex[%u]:\t%lu\n", i, i);
                    iRet = StringFromGUID2(pIfInfo->InterfaceGuid, (LPOLESTR)&GuidString,
                        sizeof(GuidString) / sizeof(*GuidString));
                    if (iRet == 0)
                        wprintf(L"StringFromGUID2failed\n");
                    else
                    {
                        wprintf(L"InterfaceGUID[%d]:%S\n", i, GuidString);
                    }
                    wprintf(L"InterfaceDescription[%d]:%S", i,
                        pIfInfo->strInterfaceDescription);
                    wprintf(L"\n");
                    wprintf(L"InterfaceState[%d]:\t", i);
                    switch (pIfInfo->isState)
                    {
                    casewlan_interface_state_not_ready:
                        wprintf(L"Notready\n");
                        break;
                    casewlan_interface_state_connected:
                        wprintf(L"Connected\n");
                        break;
                    casewlan_interface_state_ad_hoc_network_formed:
                        wprintf(L"Firstnodeinaadhocnetwork\n");
                        break;
                    casewlan_interface_state_disconnecting:
                        wprintf(L"Disconnecting\n");
                        break;
                    casewlan_interface_state_disconnected:
                        wprintf(L"Notconnected\n");
                        break;
                    casewlan_interface_state_associating:
                        wprintf(L"Attemptingtoassociatewithanetwork\n");
                        break;
                    casewlan_interface_state_discovering:
                        wprintf(L"Autoconfigurationisdiscoveringsettingsforthenetwork\n");
                        break;
                    casewlan_interface_state_authenticating:
                        wprintf(L"Inprocessofauthenticating\n");
                        break;
                    default:
                        wprintf(L"Unknownstate%ld\n", pIfInfo->isState);
                        break;
                    }
                }
            }
        }
    }
};

#define FF FindFiles::getInstance()
class FindFiles
{
    string Path;
    string Type;
    HANDLE HFinder = NULL;
    WIN32_FIND_DATAA FindFileData;
    string CurPath;
    int num = -1;
public:
    static FindFiles *getInstance()
    {
        static FindFiles obj;
        return &obj;
    }
    //D:/Music_s
    void setFindPath(const char *Path)
    {
        if (Path)
        {
            this->Path = Path;
            CurPath = this->Path;
            if (this->Path == string("exit")) { exit(0); }
        }
        else
        {
            printf("input find path .......... \n");
        }
    }
    //D:/Music_s
    void setFindPath(string &Path)
    {
        if (!Path.empty())
        {
            this->Path = Path;
            CurPath = this->Path;
            if (this->Path == string("exit")) { exit(0); }
        }
        else
        {
            printf("input find path .......... \n");
        }
    }
    // mp3 mp4 ...
    void setFindType(const char *Type)
    {
        if (Type)
        {
            this->Type = Type;
            if (this->Type == string("exit")) { exit(0); }
        }
        else
        {
            printf("input find Type .......... \n");
        }
    }
    // mp3 mp4 ...
    void setFindType(string &Type)
    {
        if (!Type.empty())
        {
            this->Type = Type;
            if (this->Type == string("exit")) { exit(0); }

            FF->strcatFindFile();
        }
        else
        {
            printf("input find Type .......... \n");
        }
    }
    string getPath() const
    {
        return this->Path;
    }
    string getType() const
    {
        return this->Type;
    }

    ///=============================================
    void run()
    {
        system("color 2");
        char path[256] = { 0 };
        char type[256] = { 0 };
        printf("input path suppose <D:/Music>:");
        std::cin >> path;
        printf("input type or input 0 is any type suppose <bmp,mp3,mp4,0,cpp,h,c,zip,avi> :");
        std::cin >> type;
        FF->setFindPath(path);
        if (string(type) == "0")
        {
            FF->setFindType("*");
        }
        else
        {
            FF->setFindType(type);
        }
        FF->strcatFindFile();
        FF->findFirstFile(FF->Path.c_str());
        while (true)
        {
            if (!find())
            {
                break;
            }
        }
        printf("\n");
        printf("number =========== ::::::::  %d file \n", num);
    }
    void run_s()
    {
        while (true)
        {
            system("cls");
            run();
            system("pause");
        }
    }
    ///=============================================

    bool find()
    {
        string tmp = FindFileData.cFileName;
        if (tmp != "." && tmp != "..")
        {
            printf("%s , %d\n", FindFileData.cFileName, FindFileData.dwFileAttributes);
        }
        num++;
        int len = strlen(FindFileData.cFileName);
        char temp[2] = { 0 };
        temp[0] = FindFileData.cFileName[len - 1];
        if (FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
        {
            if (string(temp) != "" && string(temp) != "." && string(temp) != " " && string(temp) != "..")
            {
                string lastCurPath = this->CurPath;
                string lastCur = this->CurPath;
                lastCurPath += "/";
                lastCur += "/";
                lastCurPath += FindFileData.cFileName;
                lastCur += FindFileData.cFileName;
                lastCurPath += "/*.";
                if (this->Type == string("0"))
                {
                    lastCurPath += "*";
                }
                else
                {
                    lastCurPath += this->Type;
                }

                FF->ergodicFile(lastCurPath, lastCur);
            }
        }
        if (!FF->findNextFile())
        {
            return false;
        }
        return true;
    }
    bool ergodicFile(string path, string lastCur)
    {
        WIN32_FIND_DATAA temp;
        HANDLE HFinder = FindFirstFileA(path.c_str(), &temp);
        if (HFinder == INVALID_HANDLE_VALUE)
        {
            std::cout << "查找失败 !" << std::endl;
            return true;
        }

        while (true)
        {
            string tmp = temp.cFileName;
            if (tmp != "." && tmp != "..")
            {
                printf("%s , %d\n", temp.cFileName, temp.dwFileAttributes);
            }
            num++;
            int len = strlen(temp.cFileName);
            char strTemp[2] = { 0 };
            strTemp[0] = temp.cFileName[len - 1];
            if (temp.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
            {
                if (string(strTemp) != "" && string(strTemp) != "." && string(strTemp) != " " && string(strTemp) != "..")
                {
                    string CurPaths = lastCur;
                    string lastCurPath = CurPaths;
                    lastCurPath += "/";
                    CurPaths += "/";
                    lastCurPath += temp.cFileName;
                    CurPaths += temp.cFileName;
                    lastCurPath += "/*.";
                    if (this->Type == string("0"))
                    {
                        lastCurPath += "*";
                    }
                    else
                    {
                        lastCurPath += this->Type;
                    }
                    ergodicFile(lastCurPath, CurPaths);
                }
            }

            if (!(FindNextFileA(HFinder, &temp)))
            {
                return false;
            }
        }
        return true;
    }
    void findFirstFile(string path)
    {
        HFinder = FindFirstFileA(path.c_str(), &FindFileData);
        if (HFinder == INVALID_HANDLE_VALUE)
        {
            char buf[256] = { 0 };
            for (int i = path.length() - 1; i >= 0; i--)
            {
                if (path.c_str()[i] == '.')
                {
                    int len = path.length() - i;
                    for (int j = 0; j <= len + 1; j++)
                    {
                        buf[j] = path.c_str()[j];
                    }
                }
            }
            string temp = buf;
            temp += "*";
            HFinder = FindFirstFileA(temp.c_str(), &FindFileData);
            if (HFinder == INVALID_HANDLE_VALUE)
            {
                std::cout << "查找失败 !" << std::endl;
            }
        }
    }
    void closeFind()
    {
        if (HFinder)
        {
            FindClose(HFinder);
            HFinder = NULL;
        }
    }
    bool findNextFile()
    {
        if (!(FindNextFileA(HFinder, &FindFileData)))
        {
            return false;
        }
        return true;
    }
private:
    FindFiles()
    {

    }
    ~FindFiles()
    {
        FF->closeFind();
    }
    //连接查找
    void strcatFindFile()
    {
        if (!Path.empty() && !Type.empty())
        {
            Path += "/*.";
            Path += Type.c_str();
            printf("find file path : %s\n", Path.c_str());
        }
    }
};


class Registry
{
public:
    void read_dword()//读取操作表,其类型为DWORD
    {
        HKEY hKEY;//定义有关的键,在查询结束时关闭
        //打开与路径data_Set相关的hKEY

        string data_set = "Software\\Chicony\\Lenovo1";

        //访问注册表,hKEY则保存此函数所打开的键的句柄
        if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_CURRENT_USER, data_set.c_str(), 0, KEY_READ, &hKEY))
        {
            DWORD dwValue;//长整型数据,如果是字符串数据用char数组
            DWORD dwSize = sizeof(DWORD);
            DWORD dwType = REG_DWORD;

            if (::RegQueryValueEx(hKEY, "123", 0, &dwType, (LPBYTE)&dwValue, &dwSize) != ERROR_SUCCESS)
            {
                cout << "错误:无法查询有关的注册表信息" << endl;
            }

            cout << dwValue << endl;
        }
        ::RegCloseKey(hKEY);
    }

    void read_reg_sz()//读取操作表,其类型为REG_SZ
    {
        HKEY hkey;

        string data_set = "Software\\Chicony\\Lenovo1";
        //LPCWSTR lpwchar = &data_set;

        if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_CURRENT_USER, data_set.c_str(), 0, KEY_READ, &hkey))
        {
            char dwValue[256];
            DWORD dwSzType = REG_SZ;
            DWORD dwSize = sizeof(dwValue);
            if (::RegQueryValueEx(hkey, "wangchong", 0, &dwSzType, (LPBYTE)&dwValue, &dwSize) != ERROR_SUCCESS)
            {
                cout << "无法查询有关的注册表信息" << endl;
            }
            cout << dwValue << endl;
        }
        ::RegCloseKey(hkey);
    }

    void write_dword()//在\Software\\Chicony\\Lenovo1文件夹下写入一个test111的子键,设置其名称为Name,其值为6
    {
        HKEY hkey;//定义有关的hkey,在查询结束时要关闭
        HKEY hTempKey;

        DWORD dwValue = 6;
        DWORD dwSize = sizeof(DWORD);
        DWORD dwType = REG_DWORD;

        const char  *data_set = "Software\\Chicony\\Lenovo1";
        if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_CURRENT_USER, data_set, 0, KEY_SET_VALUE, &hkey))
        {
            if (ERROR_SUCCESS == ::RegCreateKey(hkey, "test111", &hTempKey))
            {
                if (ERROR_SUCCESS != ::RegSetValueEx(hTempKey, "Name", 0, REG_DWORD, (CONST BYTE*)&dwValue, sizeof(DWORD)))
                {
                    cout << "写入注册表失败" << endl;
                }
            }
        }
        ::RegCloseKey(hkey);
    }

    void write_reg_sz()
    {
        HKEY hkey;
        HKEY hTempKey;
        char m_name_set[256] = "China";

        DWORD len = strlen(m_name_set) + 1;
        const char  *data_set = "Software\\Chicony\\Lenovo1";
        if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_CURRENT_USER, data_set, 0, KEY_SET_VALUE, &hkey))
        {
            if (ERROR_SUCCESS == ::RegCreateKey(hkey, "test1112", &hTempKey))
            {
                if (ERROR_SUCCESS != ::RegSetValueEx(hTempKey, "Name", 0, REG_SZ, (const BYTE*)m_name_set, len))
                {
                    cout << "写入错误" << endl;
                }
            }
        }
        ::RegCloseKey(hkey);
    }

    void write_binary()
    {
        HKEY hkey;
        HKEY hTempKey;
        BYTE m_name[10];
        memset(m_name, 0, sizeof(m_name));
        m_name[0] = 0xff;
        m_name[1] = 0xac;
        m_name[2] = 0x05;
        m_name[3] = 0x4e;

        const char  *data_set = "Software\\Chicony\\Lenovo1";
        if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_CURRENT_USER, data_set, 0, KEY_SET_VALUE, &hkey))
        {
            if (ERROR_SUCCESS == ::RegCreateKey(hkey, "test111", &hTempKey))
            {
                if (ERROR_SUCCESS != ::RegSetValueEx(hTempKey, "Name", 0, REG_BINARY, (unsigned char *)m_name, 5))
                {
                    cout << "写入错误" << endl;
                }
            }
        }
        ::RegCloseKey(hkey);
    }

    void delete_value()
    {
        HKEY hkey;
        const char  *data_set = "Software\\Chicony\\Lenovo1\\test1112";

        if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_CURRENT_USER, data_set, 0, KEY_SET_VALUE, &hkey))
        {
            if (ERROR_SUCCESS != ::RegDeleteValue(hkey, "Name"))
            {
                cout << "删除错误" << endl;
            }
        }
        ::RegCloseKey(hkey);
    }

    void delete_key()
    {
        HKEY hkey;
        const char  *data_set = "Software\\Chicony\\Lenovo1";

        if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_CURRENT_USER, data_set, 0, KEY_SET_VALUE, &hkey))
        {
            if (ERROR_SUCCESS != ::RegDeleteKey(hkey, "test1112"))
            {
                cout << "删除错误" << endl;
            }
        }
        ::RegCloseKey(hkey);
    }
};


#define DB DoubleBuffer::GetInstance()
// 注意 双缓冲中不能使用system("cls");
class DoubleBuffer
{
    HANDLE m_hOutBuf = NULL;
    HANDLE m_hOutput = NULL;
    //双缓冲处理显示
    DWORD bytes = 0;
    COORD coord = { 0,0 };
public:
    static DoubleBuffer *GetInstance()
    {
        static DoubleBuffer db;
        return &db;
    }
    HANDLE GetOutBuf() { return m_hOutBuf; }
    HANDLE GetOutPut() { return m_hOutput; }
    void Begin(char **data, int W_Len)
    {
        for (int i = 0; i < W_Len; i++)
        {
            coord.Y = i;
            BOOL Over = WriteConsoleOutputCharacterA(m_hOutBuf, data[i], W_Len, coord, &bytes);
        }
        //设置新的缓冲区为活动显示缓冲
        BOOL Over = SetConsoleActiveScreenBuffer(m_hOutBuf);
    }

    void Begin(char *data, int Len)
    {
        // coord 为写入的位置 是直接写入
        BOOL Over = WriteConsoleOutputCharacterA(m_hOutBuf, data, Len, coord, &bytes);
        //设置新的缓冲区为活动显示缓冲
        Over = SetConsoleActiveScreenBuffer(m_hOutBuf);
    }

    // pos 0,0 表示在0,0的位置输出
    void Begin(char *data, int Len, COORD pos)
    {
        // coord 为写入的位置 是直接写入
        BOOL Over = WriteConsoleOutputCharacterA(m_hOutBuf, data, Len, pos, &bytes);
        //设置新的缓冲区为活动显示缓冲
        Over = SetConsoleActiveScreenBuffer(m_hOutBuf);
    }

    void End(char **data, int W_Len)
    {
        for (int i = 0; i < W_Len; i++)
        {
            coord.Y = i;
            BOOL Over = WriteConsoleOutputCharacterA(m_hOutput, data[i], W_Len, coord, &bytes);
        }
        //设置新的缓冲区为活动显示缓冲
        BOOL Over = SetConsoleActiveScreenBuffer(m_hOutput);
    }

    void End(char *data, int Len)
    {
        BOOL Over = WriteConsoleOutputCharacterA(m_hOutput, data, Len, coord, &bytes);
        //设置新的缓冲区为活动显示缓冲
        Over = SetConsoleActiveScreenBuffer(m_hOutput);
    }

    void End(char *data, int Len, COORD pos)
    {
        BOOL Over = WriteConsoleOutputCharacterA(m_hOutput, data, Len, pos, &bytes);
        //设置新的缓冲区为活动显示缓冲
        Over = SetConsoleActiveScreenBuffer(m_hOutput);
    }

    /*
        system("color 2");
    char **buf = NULL;
    buf = new char*[40];
    for (int i = 0; i < 40; i++)
    {
        buf[i] = new char[40];
        for (int j = 0; j < 40; j++)
        {
            buf[i][j] = 0;
        }
    }
    srand(GetTickCount());
    while (true)
    {
        for (int i = 0; i < 40; i++)
        {
            for (int j = 0; j < 40 - 1; j++)
            {
                buf[i][j] = rand() % 48 + 32;
            }
        }
        DB->Begin(buf, 40);
        for (int i = 0; i < 40; i++)
        {
            for (int j = 0; j < 40 - 1; j++)
            {
                buf[i][j] = rand() % 48 + 32;
            }
        }
        DB->End(buf, 40);

        for (int i = 0; i < 40; i++)
        {
            for (int j = 0; j < 40 - 1; j++)
            {
                buf[i][j] = 0;
            }
        }
    }
    */

private:
    DoubleBuffer()
    {
        //创建新的控制台缓冲区
        m_hOutBuf = CreateConsoleScreenBuffer(
            GENERIC_WRITE,//定义进程可以往缓冲区写数据
            FILE_SHARE_WRITE,//定义缓冲区可共享写权限
            NULL,
            CONSOLE_TEXTMODE_BUFFER,
            NULL
        );
        m_hOutput = CreateConsoleScreenBuffer(
            GENERIC_WRITE,//定义进程可以往缓冲区写数据
            FILE_SHARE_WRITE,//定义缓冲区可共享写权限
            NULL,
            CONSOLE_TEXTMODE_BUFFER,
            NULL
        );

        //隐藏两个缓冲区的光标
        CONSOLE_CURSOR_INFO cci;
        cci.bVisible = 0;
        cci.dwSize = 1;
        SetConsoleCursorInfo(m_hOutput, &cci);
        SetConsoleCursorInfo(m_hOutBuf, &cci);
    }
    ~DoubleBuffer()
    {
        m_hOutBuf = NULL;
        m_hOutput = NULL;
    }
};

void MusicDemo()
{
    //https://github.com/zhmmmm/ANYTOOL-2.0.0.0.2Version
    system("color 2");
    //D:\Audio\YZFHKM-S.mp3
    string AudioName;
    std::cout << "Please Input Audio File Names :";
    std::cin >> AudioName;
    std::cout << "Player Music Name : " << AudioName << std::endl;
    ATA->LoadMusicsAndPlay(AudioName);

    const int H = 35;
    const int W = 100;
    char MusicName[256] = { 0 };
    strcat_s(MusicName, AudioName.c_str());
    char Buf[128];

    char **Map = NULL;
    Map = new char*[H];
    for (int i = 0; i < H; i++)
    {
        Map[i] = new char[W];
        for (int j = 0; j < W; j++)
        {
            Map[i][j] = 0;
        }
    }

    while (true)
    {
        ATA->GetAudioStreamData(ATA->GetCurPlayMusic(), Buf);
        for (int i = 0; i < H; i++)
        {
            if (Buf[i] <= 0)
            {
                for (int j = 0; j < W; j++)
                {
                    Map[i][j] = ' ';
                }
            }
            else if (Buf[i] > W - 1)
            {
                int temp = Buf[i] % W - 1;
                for (int j = 0; j < temp; j++)
                {
                    Map[i][j] = '@';
                }
            }
            else
            {
                for (int j = 0; j < Buf[i]; j++)
                {
                    Map[i][j] = '@';
                }
            }
            Map[H - 1][W - 1] = 0;
        }
        DB->Begin(Map, W);
        ATA->GetAudioStreamData(ATA->GetCurPlayMusic(), Buf);
        for (int i = 0; i < H; i++)
        {
            if (Buf[i] <= 0)
            {
                for (int j = 0; j < W; j++)
                {
                    Map[i][j] = ' ';
                }
            }
            else if (Buf[i] > W - 1)
            {
                int temp = Buf[i] % W - 1;
                for (int j = 0; j < temp; j++)
                {
                    Map[i][j] = '@';
                }
            }
            else
            {
                for (int j = 0; j < Buf[i]; j++)
                {
                    Map[i][j] = '@';
                }
            }
            Map[H - 1][W - 1] = 0;
        }
        DB->End(Map, W);
        for (int i = 0; i < H; i++)
        {
            for (int j = 0; j < W; j++)
            {
                Map[i][j] = 0;
            }
        }

    }

    delete[] Map;
    Map = NULL;
}

class CodeChange
{
public:
    void wcharTochar(char *Buf, const wchar_t* wchar)
    {
        int len = WideCharToMultiByte(CP_ACP, 0, wchar, wcslen(wchar), NULL, 0, NULL, NULL);
        WideCharToMultiByte(CP_ACP, 0, wchar, wcslen(wchar), Buf, len, NULL, NULL);
    }
    void charToWchar(wchar_t *buf, const char* cchar)
    {
        int len = MultiByteToWideChar(CP_ACP, 0, cchar, strlen(cchar), NULL, 0);
        MultiByteToWideChar(CP_ACP, 0, cchar, strlen(cchar), buf, len);
    }
    void UTF_8ToWchar(char *buf, const char* UTF_8)
    {
        int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, UTF_8, strlen(UTF_8), NULL, 0);
        wchar_t wszString[1024] = { 0 };
        ::MultiByteToWideChar(CP_UTF8, NULL, UTF_8, strlen(UTF_8), wszString, wcsLen);
        wszString[wcsLen] = '\0';
        wcharTochar(buf, wszString);
    }
    void UnicodeToUTF_8(char *buf, const wchar_t* unicode)
    {
        int len = WideCharToMultiByte(CP_UTF8, 0, unicode, -1, NULL, 0, NULL, NULL);
        WideCharToMultiByte(CP_UTF8, 0, unicode, -1, buf, len, NULL, NULL);
    }
};

//char Buf[61] = "                                   ‪‏‪‪‏​‌‎‫‏⁠‌‪‬‌‎‮‬‮‎‍‌‭‏";

typedef struct _smPROCESSINFO
{
    DWORD   dwPID;
    DWORD   dwParentPID;
    DWORD   dwSessionID;
    DWORD   dwPEBBaseAddress;
    DWORD   dwAffinityMask;
    LONG    dwBasePriority;
    LONG    dwExitStatus;
    BYTE    cBeingDebugged;
    TCHAR   szImgPath[MAX_PATH];
    TCHAR   szCmdLine[MAX_PATH];
} smPROCESSINFO;

typedef NTSTATUS (WINAPI *pNtQueryInformationProcess)(HANDLE ProcessHandle, int ProcessInformationClass, PVOID ProcessInformation, ULONG ProcessInformationLength, PULONG ReturnLength);

//NTSTATUS NtQueryInformationProcess(HANDLE ProcessHandle, int ProcessInformationClass, PVOID ProcessInformation, ULONG ProcessInformationLength, PULONG ReturnLength)
//{
//
//}

int Main()
{

    //提权
    HANDLE hToken = nullptr;
    //打开进程访问令牌
    BOOL ret = OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken);
    if (!ret) { GetLastError(); }
    //查看系统的权限的特权
    LUID luid;
    ret = LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid);
    if (!ret) { GetLastError(); }

    //调整访问令牌特权值
    TOKEN_PRIVILEGES tkp;
    tkp.PrivilegeCount = 1;
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    tkp.Privileges[0].Luid = luid;

    TOKEN_PRIVILEGES last;
    DWORD l = sizeof(last);
    //last 为原来的 可以为NULL;
    ret = AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(tkp), &last, &l);
    if (!ret) { GetLastError(); }

    //通过进程名获取进程句柄
    HANDLE hProcess = nullptr;
    //lsass.exe
    //某个进程
    const char *szProcessName = "";

    //windows 未公开的函数
    //NtQueryInformationProcess()// in ntdll.dll

    pNtQueryInformationProcess NtQueryInformationProcess =  (pNtQueryInformationProcess)GetProcAddress(GetModuleHandle("ntdll.dll"), "NtQueryInformationProcess");

    //进程遍历
    for (DWORD ID = 0; ID < 2000; ID++)
    {
        HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ID);
        if (handle != NULL && handle != nullptr)
        {
            wchar_t buf[MAX_PATH] = { 0 };
            DWORD retlen = 0;
            NTSTATUS ret = NtQueryInformationProcess(handle, 27, buf, sizeof(buf),&retlen);
            if (!ret)
            {
                //L"\\Device\\HarddiskVolume2\\Windows\\SysWOW64\\cmd.exe"
                wchar_t *Buf = (wchar_t*)((char*)buf + 8);
                if (wcsstr(Buf, L"\\lsass.exe"))
                {
                    hProcess = handle;
                    break;
                }
            }
        }
    }

    //判断系统版本
    OSVERSIONINFOA VI = { 0 };
    VI.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA);
    LPOSVERSIONINFOA VersionInfo = &VI;
    ret = GetVersionEx(VersionInfo);
    if (!ret) { GetLastError(); }
    printf("当前系统版本:%d.%d\n",VI.dwMajorVersion,VI.dwMinorVersion);

    //获取解密函数的地址
    /*
    微软打了这个补丁 在部分win7 是可以的
    */
    HMODULE hLsasrv = LoadLibrary("lsasrv.dll");
    { GetLastError(); }



    system("pause");
    return 0;
}


//#include <iostream>
//#include <conio.h>
//using namespace std;
//
//
//void are7(int(&arr)[3][4]); //引用的方式
//void are6(int(*arr)[3][4]); //二维数组指针的方式
//void are5(int *arr, int, int); //一维指针方式
//void are4(int **arr, int, int); //动态分配
//void are3(int(*arr)[4], int); //传入高
//void are2(int arr[][4], int); //传入高
//void are1(int arr[][4]); //高不用填,但一定要一个列
//
//int main()
//{
//    //int arr2[3][4] = {
//    //    { 1, 2, 3 },
//    //    { 4, 5, 6, 7 },
//    //    { 8, 9, 10, 11 },
//    //};
//    //are1(arr2);//二维数组直接传递,退化为指针
//    //are2(arr2, 3);
//    //are3(arr2,3);
//    //int *p = &arr2[0][0];
//    //are4(&p, 3, 4);
//    //are5((int*)arr2,3,4);
//    //are5(arr2[0],3,4);
//    //are6(&arr2);
//    //are7(arr2);
//    system("pause");
//    return 0;
//}
//void are1(int arr[][4])
//{
//    for (int i = 0; i < 3; i++)
//    {
//        for (int j = 0; j < 4; j++)
//        {
//            cout << arr[i][j] << " ";
//        }
//        cout << endl;
//    }
//}
//void are2(int arr[][4], int len)
//{
//    for (int i = 0; i < len; i++)
//    {
//        for (int j = 0; j < 4; j++)
//        {
//            cout << arr[i][j] << " ";
//        }
//        cout << endl;
//    }
//}
//void are3(int(*arr)[4], int len)
//{
//    for (int i = 0; i < len; i++)
//    {
//        for (int j = 0; j < 4; j++)
//        {
//            std::cout << arr[i][j] << " ";
//        }
//        std::cout << std::endl;
//    }
//}
//void are4(int **arr, int len, int row)
//{
//    arr = new int*[len];
//    for (int i = 0; i < len; i++)
//    {
//        arr[i] = new int[row];
//    }
//    for (int i = 0; i < len; i++)
//    {
//        for (int j = 0; j < row; j++)
//        {
//            std::cout << arr[i][j] << " ";
//        }
//        std::cout << std::endl;
//    }
//}
//void are5(int *arr, int len, int row)
//{
//    for (int i = 0; i < len; i++)
//    {
//        for (int j = 0; j < row; j++)
//        {
//            std::cout << arr[j + i * row] << " ";
//        }
//        std::cout << std::endl;
//    }
//}
//void are6(int(*arr)[3][4])
//{
//    for (int i = 0; i < 3; i++)
//    {
//        for (int j = 0; j < 4; j++)
//        {
//            std::cout << (*arr)[i][j] << " ";
//        }
//        std::cout << std::endl;
//    }
//}
//void are7(int(&arr)[3][4])
//{
//    for (int i = 0; i < 3; i++)
//    {
//        for (int j = 0; j < 4; j++)
//        {
//            std::cout << arr[i][j] << " ";
//        }
//        std::cout << std::endl;
//    }
//}

 

posted @ 2019-11-15 23:32  YZFHKMS-X  阅读(478)  评论(0编辑  收藏  举报