⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 visadm.cxx

📁 MSMQ at Windows Mobile 5.0 sample and develop with Visual Studio .NET 2005
💻 CXX
📖 第 1 页 / 共 2 页
字号:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
#include <windows.h>
#include <aygshell.h>
#include <tpcshell.h>

#include "resource.h"

#define MSMQ_IO_FILE L"\\temp\\msmqadmio.txt"
#define MSMQ_STREAM_LEN	(4 * _MAX_PATH)
#define WRAPPER_SZ		50

#define GUID_ELEMENTS(p) \
    p->Data1,                 p->Data2,    p->Data3,\
    p->Data4[0], p->Data4[1], p->Data4[2], p->Data4[3],\
    p->Data4[4], p->Data4[5], p->Data4[6], p->Data4[7]

#define GUID_FORMAT     L"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x"
#define GUID_STR_LENGTH (8 + 1 + 4 + 1 + 4 + 1 + 4 + 1 + 12)

#define EOL	L"\r\n"

#define CONTROL_HEIGHT  20
#define WINDOW_BORDER   4
#define SPINNER_WIDTH   10

HWND g_hWnd = NULL;
HINSTANCE g_hInst = NULL;

static void DeliverOutput (WCHAR *szFile) {
	HWND hWnd = GetDlgItem (g_hWnd, IDC_RESULTS);

	SendMessage (hWnd, WM_SETTEXT, 0, (LPARAM)L"");

	HANDLE hFile = CreateFile (szFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
	if (hFile == INVALID_HANDLE_VALUE)
		return;

	char szBufferMB[MSMQ_STREAM_LEN];
	DWORD dwLen = 0;

	if ((! ReadFile (hFile, szBufferMB, sizeof(szBufferMB) - 1, &dwLen, NULL)) || (dwLen == 0)) {
		CloseHandle (hFile);

		return;
	}

	CloseHandle (hFile);

	szBufferMB[dwLen] = '\0';

	char szBufferMB2[MSMQ_STREAM_LEN + 2];
	char *p1 = szBufferMB;
	char *p2 = szBufferMB2;

	for ( ; ; ) {
		if (p2 >= &szBufferMB2[MSMQ_STREAM_LEN])
			break;

		if (*p1 == '\0')
			break;

		if (*p1 == '\n')
			*p2++ = '\r';

		*p2++ = *p1++;
	}

	*p2 = '\0';

	WCHAR szBuffer[MSMQ_STREAM_LEN];
	if (MultiByteToWideChar (CP_ACP, 0, szBufferMB2, -1, szBuffer, 2 * _MAX_PATH))
		SendMessage (hWnd, WM_SETTEXT, 0, (LPARAM)szBuffer);
}

static void RunCommand (WCHAR *szCommand) {
	WCHAR szBuffer[_MAX_PATH + 2];
	wcscpy (szBuffer, L"-f " MSMQ_IO_FILE L" ");
	WCHAR *p = wcschr (szBuffer, L'\0');
	wcsncpy (p, szCommand, _MAX_PATH - (p - szBuffer));

	PROCESS_INFORMATION pi;

#if defined (UNDER_CE)
	if (! CreateProcess (L"msmqadm.exe", szBuffer, NULL, NULL, FALSE, 0, NULL, NULL, NULL, &pi)) {
#else
	STARTUPINFO si;
	memset (&si, 0, sizeof(si));
	si.cb = sizeof(si);
	if (! CreateProcess (L"msmqadm.exe", szBuffer, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
#endif
		SendMessage (GetDlgItem (g_hWnd, IDC_RESULTS), WM_SETTEXT, 0, (LPARAM)L"MSMQ not present.");
	} else {
		if (WaitForSingleObject (pi.hProcess, 5000) != WAIT_OBJECT_0)
			Sleep (5000);

		CloseHandle (pi.hProcess);
		CloseHandle (pi.hThread);
		SendMessage (GetDlgItem (g_hWnd, IDC_COMMAND), WM_SETTEXT, 0, (LPARAM)L"");
		DeliverOutput (MSMQ_IO_FILE);
	}
}

static int GetMyName (WCHAR *szName, DWORD cChars) {
	HKEY  hKey   = NULL;

	if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, TEXT("Ident"), 0, KEY_READ, &hKey) != ERROR_SUCCESS)
		return FALSE;

	DWORD dwType = REG_SZ;
	DWORD dwSize = sizeof(WCHAR) * cChars;

	if ((RegQueryValueEx (hKey, TEXT("name"), 0, &dwType, (LPBYTE)szName, &dwSize) != ERROR_SUCCESS) ||
		(dwType != REG_SZ) || (dwSize > cChars * sizeof(WCHAR))) {
		RegCloseKey (hKey);
		return FALSE;
	}

	TCHAR szBuffer[16];
	dwSize = sizeof(szBuffer);
	if ((RegQueryValueEx (hKey, TEXT("origname"), 0, &dwType, (LPBYTE)szBuffer, &dwSize) != ERROR_SUCCESS) ||
		(dwType != REG_SZ) || (dwSize > sizeof(szBuffer))) {
		RegCloseKey (hKey);
		return FALSE;
	}

	RegCloseKey (hKey);

	return wcsicmp (szBuffer, szName);
}

static void Verify (void) {
	WCHAR szStream[MSMQ_STREAM_LEN];
	WCHAR *pStream = szStream;
	HKEY hk = NULL;

	WCHAR szBuffer[_MAX_PATH];
	if (GetMyName (szBuffer, _MAX_PATH)) {
		wcscpy (pStream, L"Computer name is ");
		wcscat (pStream, szBuffer);
		wcscat (pStream, EOL);
		pStream += wcslen (pStream);
	} else {
		wcscpy (pStream, L"Computer does NOT have a compatible name." EOL);
		pStream += wcslen (pStream);
	}

	if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, L"Drivers\\BuiltIn\\MSMQD", 0, KEY_READ, &hk) == ERROR_SUCCESS) {
		wcscpy (pStream, EOL L"MSMQ daemon installed." EOL);
		pStream += wcslen (pStream);
		RegCloseKey (hk);
	} else {
		wcscpy (pStream, EOL L"MSMQ daemon NOT installed." EOL);
		pStream += wcslen (pStream);
	}

	if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, L"Drivers\\BuiltIn\\NETREGD", 0, KEY_READ, &hk) == ERROR_SUCCESS) {
		wcscpy (pStream, EOL L"NETREG daemon installed." EOL);
		pStream += wcslen (pStream);
		RegCloseKey (hk);
	} else {
		wcscpy (pStream, EOL L"NETREG daemon NOT installed." EOL);
		pStream += wcslen (pStream);
	}

	if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\MSMQ\\SimpleClient", 0, KEY_READ, &hk) == ERROR_SUCCESS) {
		wcscpy (pStream, EOL L"MSMQ configured." EOL);
		pStream += wcslen (pStream);

		DWORD dw;
		DWORD dwSize, dwType;
		GUID  g;

		dwSize = sizeof(DWORD);
		HRESULT hr = RegQueryValueEx (hk, L"DefaultQuota", NULL, &dwType, (LPBYTE)&dw, &dwSize);
		if ((hr == ERROR_SUCCESS) && (pStream - szStream + WRAPPER_SZ < MSMQ_STREAM_LEN))
        {
			wsprintf (pStream, L"Default Quota: %d" EOL, dw);
			pStream += wcslen (pStream);
		}

		dwSize = sizeof(DWORD);
		hr = RegQueryValueEx (hk, L"Port", NULL, &dwType, (LPBYTE)&dw, &dwSize);
		if ((hr == ERROR_SUCCESS) && (pStream - szStream + WRAPPER_SZ < MSMQ_STREAM_LEN)) 
        {
			wsprintf (pStream, L"Port: %d" EOL, dw);
			pStream += wcslen (pStream);
		}

		dwSize = sizeof(DWORD);
		hr = RegQueryValueEx (hk, L"PingPort", NULL, &dwType, (LPBYTE)&dw, &dwSize);
		if ((hr == ERROR_SUCCESS) && (pStream - szStream + WRAPPER_SZ < MSMQ_STREAM_LEN)) 
        {
			wsprintf (pStream, L"Ping Port: %d" EOL, dw);
			pStream += wcslen (pStream);
		}

		dwSize = sizeof(DWORD);
		hr = RegQueryValueEx (hk, L"PingTimeout", NULL, &dwType, (LPBYTE)&dw, &dwSize);
		if ((hr == ERROR_SUCCESS) && (pStream - szStream + WRAPPER_SZ < MSMQ_STREAM_LEN)) 
        {
			wsprintf (pStream, L"Ping Timeout: %d" EOL, dw);
			pStream += wcslen (pStream);
		}

		dwSize = sizeof(DWORD);
		hr = RegQueryValueEx (hk, L"FSMaxTimeout", NULL, &dwType, (LPBYTE)&dw, &dwSize);
		if ((hr == ERROR_SUCCESS) && (pStream - szStream + WRAPPER_SZ < MSMQ_STREAM_LEN)) 
        {
			wsprintf (pStream, L"FS Startup Timeout: %d" EOL, dw);
			pStream += wcslen (pStream);
		}

		dwSize = sizeof(DWORD);
		hr = RegQueryValueEx (hk, L"LanRetrySchedule", NULL, &dwType, (LPBYTE)&dw, &dwSize);
		if ((hr == ERROR_SUCCESS) && (pStream - szStream + WRAPPER_SZ < MSMQ_STREAM_LEN)) 
        {
			wsprintf (pStream, L"Lan Retry Timeout: %d" EOL, dw);
			pStream += wcslen (pStream);
		}

		unsigned short		asRetrySchedule[200];
		unsigned int		uiRetrySchedule = 0;

		dwSize = sizeof(asRetrySchedule);
		hr = RegQueryValueEx (hk, L"RetrySchedule", NULL, &dwType, (LPBYTE)asRetrySchedule, &dwSize);
		if ((hr == ERROR_SUCCESS) && (dwSize <= sizeof(asRetrySchedule)) && (dwSize > 0) && 
            ((dwSize & 1) == 0) && (dwType == REG_BINARY)) 
        {
			uiRetrySchedule = dwSize / sizeof(short);
        }

		if (uiRetrySchedule && (pStream - szStream + GUID_STR_LENGTH + WRAPPER_SZ < MSMQ_STREAM_LEN)) 
        {
			wsprintf (pStream, L"Retry schedule: ");
			pStream += wcslen (pStream);
			for (int i = 0 ; i < (int)uiRetrySchedule ; ++i) 
            {
				if (pStream - szStream + GUID_STR_LENGTH + WRAPPER_SZ < MSMQ_STREAM_LEN) 
                {
					wsprintf (pStream, L"%d ", asRetrySchedule[i]);
					pStream += wcslen (pStream);
				}
			}
			wcscat (pStream, EOL);
			pStream += wcslen (pStream);
		}

		dwSize = sizeof(g);
		hr = RegQueryValueEx (hk, L"QueueManagerGUID", NULL, &dwType, (LPBYTE)&g, &dwSize);
		if ((hr == ERROR_SUCCESS) && (pStream - szStream + GUID_STR_LENGTH + WRAPPER_SZ < MSMQ_STREAM_LEN)) 
        {
			wsprintf (pStream, L"QM GUID: " GUID_FORMAT EOL, GUID_ELEMENTS((&g)));
			pStream += wcslen (pStream);
		}

		dwSize = sizeof(szBuffer);
		hr = RegQueryValueEx (hk, L"OutFRSQueue", NULL, &dwType, (LPBYTE)szBuffer, &dwSize);
		if ((hr == ERROR_SUCCESS) && (wcslen (szBuffer) + (pStream - szStream) + WRAPPER_SZ < MSMQ_STREAM_LEN)) 
        {
			wsprintf (pStream, L"OutFRS queue: %s" EOL, szBuffer);
			pStream += wcslen (pStream);
		}

		dwSize = sizeof(szBuffer);
		hr = RegQueryValueEx (hk, L"DebugQueue", NULL, &dwType, (LPBYTE)szBuffer, &dwSize);
		if ((hr == ERROR_SUCCESS) && (wcslen (szBuffer) + (pStream - szStream) + WRAPPER_SZ < MSMQ_STREAM_LEN)) {
			wsprintf (pStream, L"Debug queue: %s" EOL, szBuffer);
			pStream += wcslen (pStream);
		}

		dwSize = sizeof(szBuffer);
		hr = RegQueryValueEx (hk, L"HostName", NULL, &dwType, (LPBYTE)szBuffer, &dwSize);
		if ((hr == ERROR_SUCCESS) && (wcslen (szBuffer) + (pStream - szStream) + WRAPPER_SZ < MSMQ_STREAM_LEN)) 
        {
			wsprintf (pStream, L"Host override: %s" EOL, szBuffer);
			pStream += wcslen (pStream);
		}

		dwSize = sizeof(szBuffer);
		hr = RegQueryValueEx (hk, L"CETrackNetwork", NULL, &dwType, (LPBYTE)szBuffer, &dwSize);
		if ((hr == ERROR_SUCCESS) && ((pStream - szStream) + WRAPPER_SZ < MSMQ_STREAM_LEN)) 
        {
			wsprintf (pStream, L"Network tracking: %s" EOL, (szBuffer[0] == L'y' || szBuffer[0] == L'Y') ? L"enabled" : L"disabled");
			pStream += wcslen (pStream);
		}

		dwSize = sizeof(DWORD);
		hr = RegQueryValueEx (hk, L"CEStartAtBoot", NULL, &dwType, (LPBYTE)&dw, &dwSize);
		if ((hr == ERROR_SUCCESS) && (pStream - szStream + WRAPPER_SZ < MSMQ_STREAM_LEN)) 
        {
			wsprintf (pStream, L"Start At Boot: %s" EOL, dw ? L"yes" : L"no");
			pStream += wcslen (pStream);
		}

		szBuffer[0] = L'\0';
		dwSize = sizeof(szBuffer);
		hr = RegQueryValueEx (hk, L"BaseDir", NULL, &dwType, (LPBYTE)szBuffer, &dwSize);
		if ((hr == ERROR_SUCCESS) && (wcslen (szBuffer) + (pStream - szStream) + WRAPPER_SZ < MSMQ_STREAM_LEN)) 
        {
			wsprintf (pStream, L"Base Dir: %s" EOL, szBuffer);
			pStream += wcslen (pStream);
		}

		RegCloseKey (hk);

		if (szBuffer[0] && ((pStream - szStream) + WRAPPER_SZ < MSMQ_STREAM_LEN)) 
        {
			DWORD dwAttribs = GetFileAttributes (szBuffer);
			if ((dwAttribs != 0xffffffff) && (dwAttribs & FILE_ATTRIBUTE_DIRECTORY)) 
            {
				wsprintf (pStream, L"Base Dir exists. Contents:" EOL, szBuffer);
				pStream += wcslen (pStream);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -