示例#1
0
/*
* PNDialogProc
*
* Purpose:
*
* Private Namespace Dialog window procedure.
*
*/
INT_PTR CALLBACK PNDialogProc(
	_In_  HWND hwndDlg,
	_In_  UINT uMsg,
	_In_  WPARAM wParam,
	_In_  LPARAM lParam
	)
{
	LPNMLISTVIEW nhdr = (LPNMLISTVIEW)lParam;

	switch (uMsg) {
	case WM_NOTIFY:
		PNDlgHandleNotify(nhdr);
		break;

	case WM_INITDIALOG:
		supCenterWindow(hwndDlg);
		break;

	case WM_CLOSE:
		DestroyWindow(hwndDlg);
		g_wobjDialogs[WOBJ_PNDLG_IDX] = NULL;
		return TRUE;

	case WM_COMMAND:
		if (LOWORD(wParam) == IDCANCEL) {
			SendMessage(hwndDlg, WM_CLOSE, 0, 0);
			return TRUE;
		}
		break;
	}
	return FALSE;
}
示例#2
0
/*
* UsdDialogProc
*
* Purpose:
*
* Usd Dialog Procedure
*
*/
INT_PTR CALLBACK UsdDialogProc(
	_In_  HWND hwndDlg,
	_In_  UINT uMsg,
	_In_  WPARAM wParam,
	_In_  LPARAM lParam
	)
{
	UNREFERENCED_PARAMETER(lParam);

	switch (uMsg) {

	case WM_INITDIALOG:
		supCenterWindow(hwndDlg);
		break;

	case WM_CLOSE:
		DestroyWindow(hwndDlg);
		g_wobjDialogs[WOBJ_USDDLG_IDX] = NULL;
		return TRUE;

	case WM_COMMAND:
		if (LOWORD(wParam) == IDCANCEL) {
			SendMessage(hwndDlg, WM_CLOSE, 0, 0);
			return TRUE;
		}
		break;
	}
	return FALSE;
}
示例#3
0
/*
* AboutDialogProc
*
* Purpose:
*
* About Dialog Window Dialog Procedure
*
* During WM_INITDIALOG centers window and initializes system info
*
*/
LRESULT CALLBACK AboutDialogProc(
	HWND hwndDlg,
	UINT uMsg,
	WPARAM wParam,
	LPARAM lParam
	)
{
	UNREFERENCED_PARAMETER(lParam);

	switch (uMsg) {

	case WM_INITDIALOG:
		supCenterWindow(hwndDlg);
		AboutDialogInit(hwndDlg);
		break;

	case WM_COMMAND:
		if ((LOWORD(wParam) == IDOK) || (LOWORD(wParam) == IDCANCEL))
			EndDialog(hwndDlg, S_OK);
		break;

	default:
		break;
	}
	return 0;
}
示例#4
0
/*
* PipeDlgProc
*
* Purpose:
*
* Pipe Dialog window procedure.
*
*/
INT_PTR CALLBACK PipeDlgProc(
    _In_  HWND hwndDlg,
    _In_  UINT uMsg,
    _In_  WPARAM wParam,
    _In_  LPARAM lParam
)
{
    switch (uMsg) {
    case WM_NOTIFY:
        PipeDlgHandleNotify(lParam);
        break;

    case WM_INITDIALOG:
        supCenterWindow(hwndDlg);
        break;

    case WM_CLOSE:
        DestroyWindow(hwndDlg);
        g_wobjDialogs[WOBJ_PIPEDLG_IDX] = NULL;
        ImageList_Destroy(PipeDlgContext.ImageList);
        return TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDCANCEL) {
            SendMessage(hwndDlg, WM_CLOSE, 0, 0);
            return TRUE;
        }
        break;
    }
    return FALSE;
}
示例#5
0
/*
* SdtDialogProc
*
* Purpose:
*
* KiServiceTable Dialog window procedure.
*
*/
INT_PTR CALLBACK SdtDialogProc(
	_In_  HWND hwndDlg,
	_In_  UINT uMsg,
	_In_  WPARAM wParam,
	_In_  LPARAM lParam
	)
{
	LPNMLISTVIEW nhdr = (LPNMLISTVIEW)lParam;

	switch (uMsg) {

	case WM_INITDIALOG:
		supCenterWindow(hwndDlg);
		break;

	case WM_GETMINMAXINFO:
		if (lParam) {
			((PMINMAXINFO)lParam)->ptMinTrackSize.x = 640;
			((PMINMAXINFO)lParam)->ptMinTrackSize.y = 480;
		}
		break;

	case WM_NOTIFY:
		extrasDlgHandleNotify(nhdr, &SdtDlgContext, &SdtDlgCompareFunc, NULL, NULL);
		break;

	case WM_SIZE:
		extrasSimpleListResize(hwndDlg, SdtDlgContext.SizeGrip);
		break;

	case WM_CLOSE:
		if (SdtDlgContext.SizeGrip) DestroyWindow(SdtDlgContext.SizeGrip);
		DestroyWindow(hwndDlg);
		g_wobjDialogs[WOBJ_SSDTDLG_IDX] = NULL;
		return TRUE;

	case WM_COMMAND:
		if (LOWORD(wParam) == IDCANCEL) {
			SendMessage(hwndDlg, WM_CLOSE, 0, 0);
			return TRUE;
		}
		if (LOWORD(wParam) == ID_OBJECT_COPY) {
			SdtSaveListToFile(hwndDlg);
			return TRUE;
		}
		break;

	case WM_CONTEXTMENU:
		SdtHandlePopupMenu(hwndDlg);
		break;
	}

	return FALSE;
}
示例#6
0
/*
* propCreateDialog
*
* Purpose:
*
* Initialize and create PropertySheet Window 
*
* Sets custom Window Procedure for PropertySheet
*
*/
VOID propCreateDialog(
	_In_ HWND hwndParent,
	_In_ LPWSTR lpObjectName,
	_In_ LPCWSTR lpObjectType,
	_In_opt_ LPWSTR lpDescription
	)
{
	INT					nPages;
	HWND				hwndDlg;
	PROP_OBJECT_INFO	*propContext = NULL;
	HPROPSHEETPAGE		SecurityPage;
	PROPSHEETPAGE		Page;
	PROPSHEETHEADER		PropHeader;
	WCHAR				szCaption[MAX_PATH * 2];

	if ((hwndParent == NULL) ||
		(lpObjectName == NULL) ||
		(lpObjectType == NULL)) 
	{
		return;
	}

	//
	//allocate context variable, copy name, type, object path
	//
	propContext = propContextCreate(lpObjectName, lpObjectType, CurrentObjectPath, lpDescription);
	if (propContext == NULL) {
		return;
	}

	//if worker available - wait on it
	if (g_kdctx.hDevice) {
		if (g_kdctx.hThreadWorker) {
			WaitForSingleObject(g_kdctx.hThreadWorker, INFINITE);
			CloseHandle(g_kdctx.hThreadWorker);
			g_kdctx.hThreadWorker = NULL;
		}
	}

	//remember previously focused window
	//except special types: desktop
	if (propContext->TypeIndex != TYPE_DESKTOP) {
		hPrevFocus = GetFocus();
	}

	//zero pages arrays
	nPages = 0;
	RtlSecureZeroMemory(psp, sizeof(psp));
	//
	// Properties: 
	// Basic->[Object]->[Process]->[Desktops]->[Registry]->Type->[Security]
	//

	//
	//Basic Info Page
	//
	RtlSecureZeroMemory(&Page, sizeof(Page));
	Page.dwSize = sizeof(PROPSHEETPAGE);
	Page.dwFlags = PSP_DEFAULT | PSP_USETITLE;
	Page.hInstance = g_hInstance;

	//select dialog for basic info
	switch (propContext->TypeIndex) {
	case TYPE_TIMER:
		Page.pszTemplate = MAKEINTRESOURCE(IDD_PROP_TIMER);
		break;
	case TYPE_MUTANT:
		Page.pszTemplate = MAKEINTRESOURCE(IDD_PROP_MUTANT);
		break;
	case TYPE_SEMAPHORE:
		Page.pszTemplate = MAKEINTRESOURCE(IDD_PROP_SEMAPHORE);
		break;
	case TYPE_JOB:
		Page.pszTemplate = MAKEINTRESOURCE(IDD_PROP_JOB);
		break;
	case TYPE_WINSTATION:
		Page.pszTemplate = MAKEINTRESOURCE(IDD_PROP_WINSTATION);
		break;
	case TYPE_EVENT:
		Page.pszTemplate = MAKEINTRESOURCE(IDD_PROP_EVENT);
		break;
	case TYPE_SYMLINK:
		Page.pszTemplate = MAKEINTRESOURCE(IDD_PROP_SYMLINK);
		break;
	case TYPE_KEY:
		Page.pszTemplate = MAKEINTRESOURCE(IDD_PROP_KEY);
		break;
	case TYPE_SECTION:
		Page.pszTemplate = MAKEINTRESOURCE(IDD_PROP_SECTION);
		break;
	case TYPE_DRIVER:
		Page.pszTemplate = MAKEINTRESOURCE(IDD_PROP_DRIVER);
		break;
	case TYPE_DEVICE:
		Page.pszTemplate = MAKEINTRESOURCE(IDD_PROP_DEVICE);
		break;
	case TYPE_IOCOMPLETION:
		Page.pszTemplate = MAKEINTRESOURCE(IDD_PROP_IOCOMPLETION);
		break;

	case TYPE_TYPE:
	default:
		Page.pszTemplate = MAKEINTRESOURCE(IDD_PROP_BASIC);
		break;
	}
	Page.pfnDlgProc = BasicPropDialogProc;
	Page.pszTitle = L"Basic";
	Page.lParam = (LPARAM)propContext;
	psp[nPages++] = CreatePropertySheetPage(&Page);

	//
	//Create Objects page for supported types
	//
	if (g_kdctx.hDevice != NULL) {
		switch (propContext->TypeIndex) {
		case TYPE_DIRECTORY:
		case TYPE_DRIVER:
		case TYPE_DEVICE:
		case TYPE_EVENT:
		case TYPE_MUTANT:
		case TYPE_SEMAPHORE:
		case TYPE_TIMER:
		case TYPE_IOCOMPLETION:
		case TYPE_TYPE:
			RtlSecureZeroMemory(&Page, sizeof(Page));
			Page.dwSize = sizeof(PROPSHEETPAGE);
			Page.dwFlags = PSP_DEFAULT | PSP_USETITLE;
			Page.hInstance = g_hInstance;
			Page.pszTemplate = MAKEINTRESOURCE(IDD_PROP_OBJECTDUMP);
			Page.pfnDlgProc = ObjectDumpDialogProc;
			Page.pszTitle = L"Object";
			Page.lParam = (LPARAM)propContext;
			psp[nPages++] = CreatePropertySheetPage(&Page);
			break;
		}
	}

	//
	//Create additional page(s), depending on object type
	//
	switch (propContext->TypeIndex) {
	case TYPE_DIRECTORY:
	case TYPE_PORT:
	case TYPE_FLTCOMM_PORT:
	case TYPE_FLTCONN_PORT:
	case TYPE_EVENT:
	case TYPE_MUTANT:
	case TYPE_SEMAPHORE:
	case TYPE_SECTION:
	case TYPE_SYMLINK:
	case TYPE_TIMER:
	case TYPE_JOB:
	case TYPE_WINSTATION:
	case TYPE_IOCOMPLETION:
		RtlSecureZeroMemory(&Page, sizeof(Page));
		Page.dwSize = sizeof(PROPSHEETPAGE);
		Page.dwFlags = PSP_DEFAULT | PSP_USETITLE;
		Page.hInstance = g_hInstance;
		Page.pszTemplate = MAKEINTRESOURCE(IDD_PROP_PROCESSLIST);
		Page.pfnDlgProc = ProcessListDialogProc;
		Page.pszTitle = L"Process";
		Page.lParam = (LPARAM)propContext;
		psp[nPages++] = CreatePropertySheetPage(&Page);

		//
		//Add desktop list for selected desktop, located here because of sheets order
		//
		if (propContext->TypeIndex == TYPE_WINSTATION) {
			RtlSecureZeroMemory(&Page, sizeof(Page));
			Page.dwSize = sizeof(PROPSHEETPAGE);
			Page.dwFlags = PSP_DEFAULT | PSP_USETITLE;
			Page.hInstance = g_hInstance;
			Page.pszTemplate = MAKEINTRESOURCE(IDD_PROP_DESKTOPS);
			Page.pfnDlgProc = DesktopListDialogProc;
			Page.pszTitle = L"Desktops";
			Page.lParam = (LPARAM)propContext;
			psp[nPages++] = CreatePropertySheetPage(&Page);
		}

		break;
	case TYPE_DRIVER:
		//
		//Add registry page
		//
		RtlSecureZeroMemory(&Page, sizeof(Page));
		Page.dwSize = sizeof(PROPSHEETPAGE);
		Page.dwFlags = PSP_DEFAULT | PSP_USETITLE;
		Page.hInstance = g_hInstance;
		Page.pszTemplate = MAKEINTRESOURCE(IDD_PROP_SERVICE);
		Page.pfnDlgProc = DriverRegistryDialogProc;
		Page.pszTitle = L"Registry";
		Page.lParam = (LPARAM)propContext;
		psp[nPages++] = CreatePropertySheetPage(&Page);
		break;
	}

	//
	//Type Info Page
	//
	RtlSecureZeroMemory(&Page, sizeof(Page));
	Page.dwSize = sizeof(PROPSHEETPAGE);
	Page.dwFlags = PSP_DEFAULT | PSP_USETITLE;
	Page.hInstance = g_hInstance;
	Page.pszTemplate = MAKEINTRESOURCE(IDD_PROP_TYPE);
	Page.pfnDlgProc = TypePropDialogProc;
	Page.pszTitle = L"Type";
	Page.lParam = (LPARAM)propContext;
	psp[nPages++] = CreatePropertySheetPage(&Page);

	//
	//Create Security Dialog if available
	//
	SecurityPage = propSecurityCreatePage(
		propContext, //Context
		(POPENOBJECTMETHOD)&propOpenCurrentObject, //OpenObjectMethod
		NULL, //CloseObjectMethod, use default
		SI_EDIT_AUDITS | SI_EDIT_OWNER | SI_EDIT_PERMS | //psiFlags
		SI_ADVANCED | SI_NO_ACL_PROTECT | SI_NO_TREE_APPLY |
		SI_PAGE_TITLE
		);
	if (SecurityPage != NULL) {
		psp[nPages++] = SecurityPage;
	}

	//
	//Finally create property sheet
	//
	if (propContext->IsType) {
		_strncpy(szCaption, MAX_PATH, lpObjectName, _strlen(lpObjectName));
	}
	else {
		_strncpy(szCaption, MAX_PATH, lpObjectType, _strlen(lpObjectType));
	}

	_strcat(szCaption, L" Properties");
	RtlSecureZeroMemory(&PropHeader, sizeof(PropHeader));
	PropHeader.dwSize = sizeof(PropHeader);
	PropHeader.phpage = psp;
	PropHeader.nPages = nPages;
	PropHeader.dwFlags = PSH_DEFAULT | PSH_NOCONTEXTHELP | PSH_MODELESS;
	PropHeader.nStartPage = 0;
	PropHeader.hwndParent = hwndParent;
	PropHeader.hInstance = g_hInstance;
	PropHeader.pszCaption = szCaption;

	hwndDlg = (HWND)PropertySheet(&PropHeader);

	//remove class icon if any
	SetClassLongPtr(hwndDlg, GCLP_HICON, (LONG_PTR)NULL);

	if (propContext->TypeIndex == TYPE_DESKTOP) {
		g_SubPropWindow = hwndDlg;
	}
	else {
		g_PropWindow = hwndDlg;
	}
	if (hwndDlg) {
		SetProp(hwndDlg, T_PROPCONTEXT, (HANDLE)propContext);
		PropSheetOriginalWndProc = (WNDPROC)GetWindowLongPtr(hwndDlg, GWLP_WNDPROC);
		if (PropSheetOriginalWndProc) {
			SetWindowLongPtr(hwndDlg, GWLP_WNDPROC, (LONG_PTR)&PropSheetCustomWndProc);
		}
		supCenterWindow(hwndDlg);
	}
}
示例#7
0
/*
* FindDlgProc
*
* Purpose:
*
* Find Dialog window procedure.
*
*/
INT_PTR CALLBACK FindDlgProc(
    _In_  HWND hwndDlg,
    _In_  UINT uMsg,
    _In_  WPARAM wParam,
    _In_  LPARAM lParam
)
{
    WCHAR           search_string[MAX_PATH + 1], type_name[MAX_PATH + 1];
    LPWSTR          pnamestr = (LPWSTR)search_string, ptypestr = (LPWSTR)type_name;
    PFO_LIST_ITEM   flist, plist;
    ULONG           cci;
    LPNMLISTVIEW    nhdr = (LPNMLISTVIEW)lParam;

    switch (uMsg) {
    case WM_NOTIFY:
        FindDlgHandleNotify(nhdr);
        break;

    case WM_GETMINMAXINFO:
        if (lParam) {
            ((PMINMAXINFO)lParam)->ptMinTrackSize.x = 548;
            ((PMINMAXINFO)lParam)->ptMinTrackSize.y = 230;
        }
        break;

    case WM_INITDIALOG:
        supCenterWindow(hwndDlg);
        FindDlgResize(hwndDlg);
        break;

    case WM_SIZE:
        FindDlgResize(hwndDlg);
        break;

    case WM_CLOSE:
        if (FindDlgGrip) DestroyWindow(FindDlgGrip);
        DestroyWindow(hwndDlg);
        FindDialog = NULL;
        g_wobjDialogs[WOBJ_FINDDLG_IDX] = NULL;
        return TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDCANCEL) {
            SendMessage(hwndDlg, WM_CLOSE, 0, 0);
            return TRUE;
        }

        if (LOWORD(wParam) == ID_SEARCH_FIND) {

            supSetWaitCursor(TRUE);
            EnableWindow(GetDlgItem(hwndDlg, ID_SEARCH_FIND), FALSE);

            ListView_DeleteAllItems(FindDlgList);
            RtlSecureZeroMemory(&search_string, sizeof(search_string));
            RtlSecureZeroMemory(&type_name, sizeof(type_name));
            SendMessageW(GetDlgItem(hwndDlg, ID_SEARCH_NAME), WM_GETTEXT, MAX_PATH, (LPARAM)&search_string);
            SendMessageW(GetDlgItem(hwndDlg, ID_SEARCH_TYPE), WM_GETTEXT, MAX_PATH, (LPARAM)&type_name);
            flist = NULL;

            if (search_string[0] == 0)
                pnamestr = NULL;
            if (type_name[0] == '*')
                ptypestr = 0;

            FindObject(L"\\", pnamestr, ptypestr, &flist);

            cci = 0;
            while (flist != NULL) {
                FindDlgAddListItem(FindDlgList, flist->ObjectName, flist->ObjectType);
                plist = flist->Prev;
                HeapFree(GetProcessHeap(), 0, flist);
                flist = plist;
                cci++;
            }

            ultostr(cci, search_string);
            _strcat(search_string, L" Object(s) found");
            SendMessageW(GetDlgItem(hwndDlg, ID_SEARCH_GROUPBOX), WM_SETTEXT, 0, (LPARAM)search_string);

            ListView_SortItemsEx(FindDlgList, &FindDlgCompareFunc, FindDlgSortColumn);

            supSetWaitCursor(FALSE);
            EnableWindow(GetDlgItem(hwndDlg, ID_SEARCH_FIND), TRUE);
        }

        break;
    }
    return FALSE;
}