mirror of https://github.com/tongzx/nt5src
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
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;
|
|
}
|