|
[此招聘信息失效]借宝地发个招聘帖子[360安全卫士]~~~
我顶,我再顶~ |
|
|
|
[分享]最近在研究系统,特意发个东东给大家玩~
上述代码copy于reactos 0.3.3 RC工程 |
|
[分享]最近在研究系统,特意发个东东给大家玩~
发个摘录版的userinit.exe的代码吧,写xx的人可以学习一下,机器狗的userinit.exe不支持cmd模式好挫啊~ static LONG ReadRegSzKey( IN HKEY hKey, IN LPCWSTR pszKey, OUT LPWSTR* pValue) { LONG rc; DWORD dwType; DWORD cbData = 0; LPWSTR Value; rc = RegQueryValueExW(hKey, pszKey, NULL, &dwType, NULL, &cbData); if (rc != ERROR_SUCCESS) return rc; if (dwType != REG_SZ) return ERROR_FILE_NOT_FOUND; Value = (WCHAR*) HeapAlloc(GetProcessHeap(), 0, cbData + sizeof(WCHAR)); if (!Value) return ERROR_NOT_ENOUGH_MEMORY; rc = RegQueryValueExW(hKey, pszKey, NULL, NULL, (LPBYTE)Value, &cbData); if (rc != ERROR_SUCCESS) { HeapFree(GetProcessHeap(), 0, Value); return rc; } /* NULL-terminate the string */ Value[cbData / sizeof(WCHAR)] = '\0'; *pValue = Value; return ERROR_SUCCESS; } static BOOL IsConsoleShell(void) { HKEY ControlKey = NULL; LPWSTR SystemStartOptions = NULL; LPWSTR CurrentOption, NextOption; /* Pointers into SystemStartOptions */ LONG rc; BOOL ret = FALSE; rc = RegOpenKeyEx( HKEY_LOCAL_MACHINE, REGSTR_PATH_CURRENT_CONTROL_SET, 0, KEY_QUERY_VALUE, &ControlKey); rc = ReadRegSzKey(ControlKey, L"SystemStartOptions", &SystemStartOptions); if (rc != ERROR_SUCCESS) goto cleanup; /* Check for CMDCONS in SystemStartOptions */ CurrentOption = SystemStartOptions; while (CurrentOption) { NextOption = wcschr(CurrentOption, L' '); if (NextOption) *NextOption = L'\0'; if (wcsicmp(CurrentOption, L"CMDCONS") == 0) { ret = TRUE; goto cleanup; } CurrentOption = NextOption ? NextOption + 1 : NULL; } cleanup: if (ControlKey != NULL) RegCloseKey(ControlKey); HeapFree(GetProcessHeap(), 0, SystemStartOptions); return ret; } static BOOL GetShell(WCHAR *CommandLine, HKEY hRootKey) { HKEY hKey; DWORD Type, Size; WCHAR Shell[MAX_PATH]; BOOL Ret = FALSE; BOOL ConsoleShell = IsConsoleShell(); if(RegOpenKeyEx(hRootKey, L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon", /* FIXME: should be REGSTR_PATH_WINLOGON */ 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) { Size = MAX_PATH * sizeof(WCHAR); if(RegQueryValueEx(hKey, ConsoleShell ? L"ConsoleShell" : L"Shell", NULL, &Type, (LPBYTE)Shell, &Size) == ERROR_SUCCESS) { if((Type == REG_SZ) || (Type == REG_EXPAND_SZ)) { wcscpy(CommandLine, Shell); Ret = TRUE; } } RegCloseKey(hKey); } return Ret; } static VOID StartAutoApplications(int clsid) { WCHAR szPath[MAX_PATH] = {0}; HRESULT hResult; HANDLE hFind; WIN32_FIND_DATAW findData; SHELLEXECUTEINFOW ExecInfo; size_t len; hResult = SHGetFolderPathW(NULL, clsid, NULL, SHGFP_TYPE_CURRENT, szPath); len = wcslen(szPath); if (!SUCCEEDED(hResult) || len == 0) { return; } wcscat(szPath, L"\\*"); hFind = FindFirstFileW(szPath, &findData); if (hFind == INVALID_HANDLE_VALUE) { return; } szPath[len] = L'\0'; do { if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && (findData.nFileSizeHigh || findData.nFileSizeLow)) { memset(&ExecInfo, 0x0, sizeof(SHELLEXECUTEINFOW)); ExecInfo.cbSize = sizeof(ExecInfo); ExecInfo.lpVerb = L"open"; ExecInfo.lpFile = findData.cFileName; ExecInfo.lpDirectory = szPath; ShellExecuteExW(&ExecInfo); } }while(FindNextFileW(hFind, &findData)); FindClose(hFind); } static BOOL TryToStartShell(LPCWSTR Shell) { STARTUPINFO si; PROCESS_INFORMATION pi; WCHAR ExpandedShell[MAX_PATH]; ZeroMemory(&si, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); ZeroMemory(&pi, sizeof(PROCESS_INFORMATION)); ExpandEnvironmentStrings(Shell, ExpandedShell, MAX_PATH); if(!CreateProcess(NULL, ExpandedShell, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi)) return FALSE; StartAutoApplications(CSIDL_STARTUP); StartAutoApplications(CSIDL_COMMON_STARTUP); WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); return TRUE; } static void StartShell(void) { WCHAR Shell[MAX_PATH]; TCHAR szMsg[RC_STRING_MAX_SIZE]; /* Try to run shell in user key */ if (GetShell(Shell, HKEY_CURRENT_USER) && TryToStartShell(Shell)) return; /* Try to run shell in local machine key */ if (GetShell(Shell, HKEY_LOCAL_MACHINE) && TryToStartShell(Shell)) return; /* Try default shell */ if (IsConsoleShell()) { if(GetSystemDirectory(Shell, MAX_PATH - 8)) wcscat(Shell, L"\\cmd.exe"); else wcscpy(Shell, L"cmd.exe"); } else { if(GetWindowsDirectory(Shell, MAX_PATH - 13)) wcscat(Shell, L"\\explorer.exe"); else wcscpy(Shell, L"explorer.exe"); } if (!TryToStartShell(Shell)) { LoadString( GetModuleHandle(NULL), STRING_USERINIT_FAIL, szMsg, sizeof(szMsg) / sizeof(szMsg[0])); MessageBox(0, szMsg, NULL, 0); } } WCHAR g_RegColorNames[][32] = {L"Scrollbar", /* 00 = COLOR_SCROLLBAR */ L"Background", /* 01 = COLOR_DESKTOP */ L"ActiveTitle", /* 02 = COLOR_ACTIVECAPTION */ L"InactiveTitle", /* 03 = COLOR_INACTIVECAPTION */ L"Menu", /* 04 = COLOR_MENU */ L"Window", /* 05 = COLOR_WINDOW */ L"WindowFrame", /* 06 = COLOR_WINDOWFRAME */ L"MenuText", /* 07 = COLOR_MENUTEXT */ L"WindowText", /* 08 = COLOR_WINDOWTEXT */ L"TitleText", /* 09 = COLOR_CAPTIONTEXT */ L"ActiveBorder", /* 10 = COLOR_ACTIVEBORDER */ L"InactiveBorder", /* 11 = COLOR_INACTIVEBORDER */ L"AppWorkSpace", /* 12 = COLOR_APPWORKSPACE */ L"Hilight", /* 13 = COLOR_HIGHLIGHT */ L"HilightText", /* 14 = COLOR_HIGHLIGHTTEXT */ L"ButtonFace", /* 15 = COLOR_BTNFACE */ L"ButtonShadow", /* 16 = COLOR_BTNSHADOW */ L"GrayText", /* 17 = COLOR_GRAYTEXT */ L"ButtonText", /* 18 = COLOR_BTNTEXT */ L"InactiveTitleText", /* 19 = COLOR_INACTIVECAPTIONTEXT */ L"ButtonHilight", /* 20 = COLOR_BTNHIGHLIGHT */ L"ButtonDkShadow", /* 21 = COLOR_3DDKSHADOW */ L"ButtonLight", /* 22 = COLOR_3DLIGHT */ L"InfoText", /* 23 = COLOR_INFOTEXT */ L"InfoWindow", /* 24 = COLOR_INFOBK */ L"ButtonAlternateFace", /* 25 = COLOR_ALTERNATEBTNFACE */ L"HotTrackingColor", /* 26 = COLOR_HOTLIGHT */ L"GradientActiveTitle", /* 27 = COLOR_GRADIENTACTIVECAPTION */ L"GradientInactiveTitle", /* 28 = COLOR_GRADIENTINACTIVECAPTION */ L"MenuHilight", /* 29 = COLOR_MENUHILIGHT */ L"MenuBar" /* 30 = COLOR_MENUBAR */ }; #define NUM_SYSCOLORS (sizeof(g_RegColorNames) / sizeof(g_RegColorNames[0])) static COLORREF StrToColorref(LPWSTR lpszCol) { BYTE rgb[3]; rgb[0] = StrToIntW(lpszCol); lpszCol = StrChrW(lpszCol, L' ') + 1; rgb[1] = StrToIntW(lpszCol); lpszCol = StrChrW(lpszCol, L' ') + 1; rgb[2] = StrToIntW(lpszCol); return RGB(rgb[0], rgb[1], rgb[2]); } static void SetUserSysColors(void) { HKEY hKey; INT i; WCHAR szColor[20]; DWORD Type, Size; COLORREF crColor; if(!RegOpenKeyEx(HKEY_CURRENT_USER, L"Control Panel\\Colors", 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) { return; } for(i = 0; i < NUM_SYSCOLORS; i++) { Size = sizeof(szColor); if(RegQueryValueEx(hKey, g_RegColorNames[i], NULL, &Type, (LPBYTE)szColor, &Size) == ERROR_SUCCESS && Type == REG_SZ) { crColor = StrToColorref(szColor); SetSysColors(1, &i, &crColor); } } RegCloseKey(hKey); return; } static void LoadUserFontSetting(LPWSTR lpValueName, PLOGFONTW pFont) { HKEY hKey; LOGFONTW lfTemp; DWORD Type, Size; INT error; Size = sizeof(LOGFONTW); if(!RegOpenKeyEx(HKEY_CURRENT_USER, L"Control Panel\\Desktop\\WindowMetrics", 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) { return; } error = RegQueryValueEx(hKey, lpValueName, NULL, &Type, (LPBYTE)&lfTemp, &Size); if ((error != ERROR_SUCCESS) || (Type != REG_BINARY)) { return; } RegCloseKey(hKey); /* FIXME: Check if lfTemp is a valid font */ *pFont = lfTemp; return; } static void LoadUserMetricSetting(LPWSTR lpValueName, INT *pValue) { HKEY hKey; DWORD Type, Size; INT ret; WCHAR strValue[8]; Size = sizeof(strValue); if(!RegOpenKeyEx(HKEY_CURRENT_USER, L"Control Panel\\Desktop\\WindowMetrics", 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) { return; } ret = RegQueryValueEx(hKey, lpValueName, NULL, &Type, (LPBYTE)&strValue, &Size); if ((ret != ERROR_SUCCESS) || (Type != REG_SZ)) { return; } RegCloseKey(hKey); *pValue = StrToInt(strValue); return; } static void SetUserMetrics(void) { NONCLIENTMETRICSW ncmetrics; MINIMIZEDMETRICS mmmetrics; ncmetrics.cbSize = sizeof(NONCLIENTMETRICSW); mmmetrics.cbSize = sizeof(MINIMIZEDMETRICS); SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSW), &ncmetrics, 0); SystemParametersInfoW(SPI_GETMINIMIZEDMETRICS, sizeof(MINIMIZEDMETRICS), &mmmetrics, 0); LoadUserFontSetting(L"CaptionFont", &ncmetrics.lfCaptionFont); LoadUserFontSetting(L"SmCaptionFont", &ncmetrics.lfSmCaptionFont); LoadUserFontSetting(L"MenuFont", &ncmetrics.lfMenuFont); LoadUserFontSetting(L"StatusFont", &ncmetrics.lfStatusFont); LoadUserFontSetting(L"MessageFont", &ncmetrics.lfMessageFont); /* FIXME: load icon font ? */ LoadUserMetricSetting(L"BorderWidth", &ncmetrics.iBorderWidth); LoadUserMetricSetting(L"ScrollWidth", &ncmetrics.iScrollWidth); LoadUserMetricSetting(L"ScrollHeight", &ncmetrics.iScrollHeight); LoadUserMetricSetting(L"CaptionWidth", &ncmetrics.iCaptionWidth); LoadUserMetricSetting(L"CaptionHeight", &ncmetrics.iCaptionHeight); LoadUserMetricSetting(L"SmCaptionWidth", &ncmetrics.iSmCaptionWidth); LoadUserMetricSetting(L"SmCaptionHeight", &ncmetrics.iSmCaptionHeight); LoadUserMetricSetting(L"Menuwidth", &ncmetrics.iMenuWidth); LoadUserMetricSetting(L"MenuHeight", &ncmetrics.iMenuHeight); SystemParametersInfoW(SPI_SETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSW), &ncmetrics, 0); return; } static void SetUserWallpaper(void) { HKEY hKey; DWORD Type, Size; WCHAR szWallpaper[MAX_PATH + 1]; if(RegOpenKeyEx(HKEY_CURRENT_USER, REGSTR_PATH_DESKTOP, 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) { Size = sizeof(szWallpaper); if(RegQueryValueEx(hKey, L"Wallpaper", NULL, &Type, (LPBYTE)szWallpaper, &Size) == ERROR_SUCCESS && Type == REG_SZ) { ExpandEnvironmentStrings(szWallpaper, szWallpaper, MAX_PATH); /* Load and change the wallpaper */ SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, szWallpaper, SPIF_SENDCHANGE); } else { /* remove the wallpaper */ SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, NULL, SPIF_SENDCHANGE); } RegCloseKey(hKey); } } static void SetUserSettings(void) { SetUserSysColors(); SetUserMetrics(); SetUserWallpaper(); } typedef DWORD (WINAPI *PCMP_REPORT_LOGON)(DWORD, DWORD); static VOID NotifyLogon(VOID) { HINSTANCE hModule; PCMP_REPORT_LOGON CMP_Report_LogOn; hModule = LoadLibrary(L"setupapi.dll"); if (hModule) { CMP_Report_LogOn = (PCMP_REPORT_LOGON)GetProcAddress(hModule, "CMP_Report_LogOn"); if (CMP_Report_LogOn) CMP_Report_LogOn(CMP_MAGIC, GetCurrentProcessId()); FreeLibrary(hModule); } } #ifdef _MSC_VER #pragma warning(disable : 4100) #endif /* _MSC_VER */ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) { NotifyLogon(); SetUserSettings(); StartShell(); return 0; } |
|
[此招聘信息失效]借宝地发个招聘帖子[360安全卫士]~~~
www.360safe.com |
|
[求助]首次使用VC6。0来写代码,请大家指点一下,如何能够获取模块的全路径名称(使用TLHELP32而不是用PSAPI或者别的什么)
NtQueryVirtualMemory啊~o(∩_∩)o...哈哈不要用win32 api,要native,要native |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值