Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

201 lines
5.9 KiB

#include "ids.h"
#include "cmmn.h"
#include <windows.h>
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;
}