?? visadm.cxx
字號:
//
// 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 + -