#include "ids.h" #include "cmmn.h" #include BOOL g_fPaused = FALSE; HWND g_hwndDlg = NULL; HANDLE g_hEvent = NULL; LRESULT CALLBACK MainDlgProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow) { MSG msg; WNDCLASSEX wndclass; static WCHAR szAppName[] = TEXT("APDIAG"); hPrevInstance; szCmdLine; wndclass.cbSize = sizeof (wndclass); wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = MainDlgProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = DLGWINDOWEXTRA; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(hInstance, szAppName); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName; wndclass.hIconSm = LoadIcon(hInstance, szAppName); RegisterClassEx(&wndclass); g_hwndDlg = CreateDialog(hInstance, szAppName, 0, NULL); ShowWindow(g_hwndDlg, iCmdShow); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int)msg.wParam; } // Copied from shell32 BOOL _TestTokenMembership(HANDLE hToken, ULONG ulRID) { static SID_IDENTIFIER_AUTHORITY sSystemSidAuthority = SECURITY_NT_AUTHORITY; PSID pSIDLocalGroup; BOOL fResult = FALSE; if (AllocateAndInitializeSid(&sSystemSidAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, ulRID, 0, 0, 0, 0, 0, 0, &pSIDLocalGroup) != FALSE) { if (CheckTokenMembership(hToken, pSIDLocalGroup, &fResult) == FALSE) { fResult = FALSE; } FreeSid(pSIDLocalGroup); } return fResult; } LRESULT CALLBACK MainDlgProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { LRESULT lres = 0; BOOL fDoDefault = TRUE; static BOOL fInited = FALSE; switch (iMsg) { case WM_CREATE: g_fPaused = FALSE; break; case WM_ACTIVATE: if (!fInited) { // Run this only for Admins if (_TestTokenMembership(NULL, DOMAIN_ALIAS_RID_ADMINS)) { CreateThread(NULL, 0, Do, 0, 0, NULL); fInited = TRUE; } else { MessageBox(hwnd, TEXT("You need to be an Administrator to run this application."), TEXT("Autoplay Diagnostic Tools"), MB_OK | MB_ICONEXCLAMATION); } } break; case WM_COMMAND: if (BN_CLICKED == HIWORD(wParam)) { switch (LOWORD(wParam)) { case IDC_PAUSERESUME: if (g_fPaused) { // Resuming SendMessage(GetDlgItem(hwnd, IDC_PAUSERESUME), WM_SETTEXT, 0, (LPARAM)TEXT("&Pause")); } else { // Pausing SendMessage(GetDlgItem(hwnd, IDC_PAUSERESUME), WM_SETTEXT, 0, (LPARAM)TEXT("&Resume")); } g_fPaused = !g_fPaused; break; case IDC_CLEAR: SendMessage(GetDlgItem(hwnd, IDC_EDIT1), WM_SETTEXT, 0, (LPARAM)TEXT("")); break; case IDC_COPYALL: { if (OpenClipboard(hwnd)) { BOOL fGoOn = FALSE; BOOL fFreeMem = TRUE; LRESULT cch = SendMessage(GetDlgItem(hwnd, IDC_EDIT1), WM_GETTEXTLENGTH, 0, 0); HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, (cch + 1) * sizeof(WCHAR)); if (hMem) { PVOID pv = GlobalLock(hMem); if (pv) { if (SendMessage(GetDlgItem(hwnd, IDC_EDIT1), WM_GETTEXT, (WPARAM)(cch + 1), (LPARAM)pv)) { fGoOn = TRUE; } GlobalUnlock(hMem); } } if (fGoOn) { HANDLE h = SetClipboardData(CF_UNICODETEXT, hMem); if (h) { fFreeMem = FALSE; } } if (fFreeMem) { GlobalFree(hMem); } CloseClipboard(); } break; } } } break; case WM_DESTROY: if (g_hEvent) { CloseHandle(g_hEvent); } PostQuitMessage(0); fDoDefault = FALSE; break; } if (fDoDefault) { lres = DefWindowProc(hwnd, iMsg, wParam, lParam); } return lres; }