/* * 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; }
/* * 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; }
/* * 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; }
/* * 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; }
/* * 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; }
/* * 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); } }
/* * 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; }