Пример #1
0
/*
* MainWindowHandleWMCommand
*
* Purpose:
*
* Main window WM_COMMAND handler.
*
*/
LRESULT MainWindowHandleWMCommand(
    _In_ HWND hwnd,
    _In_ WPARAM wParam,
    _In_ LPARAM lParam
)
{
    LPWSTR  lpItemText;
    HWND    hwndFocus;

    UNREFERENCED_PARAMETER(lParam);

    switch (LOWORD(wParam)) {

    case ID_FILE_RUNASADMIN:
        supRunAsAdmin();
        break;

    case ID_FILE_EXIT:
        PostQuitMessage(0);
        break;

    case ID_OBJECT_PROPERTIES:
        hwndFocus = GetFocus();
        if (hwndFocus == g_hwndObjectList) {
            MainWindowHandleObjectListProp(hwnd);
        }
        if (hwndFocus == g_hwndObjectTree) {
            MainWindowHandleObjectTreeProp(hwnd);
        }
        break;

    case ID_OBJECT_GOTOLINKTARGET:
        lpItemText = supGetItemText(g_hwndObjectList, ListView_GetSelectionMark(g_hwndObjectList), 2, NULL);
        if (lpItemText) {
            if (_strcmpi(lpItemText, L"\\??") == 0) {
                ListToObject(L"\\GLOBAL??");
            }
            else {
                ListToObject(lpItemText);
            }
            supHeapFree(lpItemText);
        }
        else {
            lpItemText = supGetItemText(g_hwndObjectList, ListView_GetSelectionMark(g_hwndObjectList), 0, NULL);
            if (lpItemText) {
                if ((_strcmpi(lpItemText, L"GLOBALROOT") == 0) &&
                    (_strcmpi(g_WinObj.CurrentObjectPath, L"\\GLOBAL??") == 0))
                {
                    ListToObject(L"\\");
                }
                supHeapFree(lpItemText);
            }
        }
        break;

    case ID_FIND_FINDOBJECT:
        FindDlgCreate(hwnd);
        break;

    case ID_VIEW_REFRESH:
        MainWindowOnRefresh(hwnd);
        break;

        //Extras -> Pipes
    case ID_EXTRAS_PIPES:
        extrasShowPipeDialog(hwnd);
        break;

        //Extras -> Mailslots
    case ID_EXTRAS_MAILSLOTS:
        extrasShowMailslotsDialog(hwnd);
        break;

        //Extras -> UserSharedData
    case ID_EXTRAS_USERSHAREDDATA:
        extrasShowUserSharedDataDialog(hwnd);
        break;

        //Extras -> Private Namespaces
    case ID_EXTRAS_PRIVATENAMESPACES:
        if (g_WinObj.osver.dwBuildNumber <= 10240) {

            //feature require driver usage
            if (g_kdctx.hDevice != NULL) {
                extrasShowPrivateNamespacesDialog(hwnd);
            }
        }
        break;

        //Extras -> KiServiceTable
    case ID_EXTRAS_SSDT:

        //feature require driver usage
#ifndef _DEBUG
        if (g_kdctx.hDevice != NULL) {
#endif
            extrasShowSSDTDialog(hwnd);
#ifndef _DEBUG
        }
#endif
        break;

        //Extras -> Drivers
    case ID_EXTRAS_DRIVERS:
        extrasShowDriversDialog(hwnd);
        break;

    case ID_HELP_ABOUT:
        DialogBoxParam(g_WinObj.hInstance, MAKEINTRESOURCE(IDD_DIALOG_ABOUT),
            hwnd, (DLGPROC)&AboutDialogProc, 0);
        break;

    case ID_HELP_HELP:
        supShowHelp();
        break;

    default:
        break;
    }
    return FALSE;
}
Пример #2
0
/*
* MainWindowHandleWMNotify
*
* Purpose:
*
* Main window WM_NOTIFY handler.
*
*/
LRESULT MainWindowHandleWMNotify(
    _In_ HWND hwnd,
    _In_ WPARAM wParam,
    _In_ LPARAM lParam
)
{
    INT             c, k;
    LPNMHDR         hdr = (LPNMHDR)lParam;
    LPTOOLTIPTEXT   lpttt;
    LPNMLISTVIEW    lvn;
    LPNMTREEVIEW    lpnmTreeView;
    LPWSTR          str;
    SIZE_T          lcp;
    LVITEM          lvitem;
    LVCOLUMN        col;
    TVHITTESTINFO   hti;
    POINT           pt;
    WCHAR           item_string[MAX_PATH + 1];

    UNREFERENCED_PARAMETER(wParam);

    if (hdr) {

        if (hdr->hwndFrom == g_hwndObjectTree) {
            switch (hdr->code) {
            case TVN_ITEMEXPANDED:
            case TVN_SELCHANGED:
                SetFocus(g_hwndObjectTree);
                supSetWaitCursor(TRUE);
                MainWindowTreeViewSelChanged((LPNMTREEVIEWW)lParam);
                SendMessage(hwndStatusBar, WM_SETTEXT, 0, (LPARAM)g_WinObj.CurrentObjectPath);

                ListObjectsInDirectory(g_WinObj.CurrentObjectPath);

                ListView_SortItemsEx(g_hwndObjectList, &MainWindowObjectListCompareFunc, SortColumn);

                supSetWaitCursor(FALSE);

                lpnmTreeView = (LPNMTREEVIEW)lParam;
                if (lpnmTreeView) {
                    SelectedTreeItem = lpnmTreeView->itemNew.hItem;
                }
                break;

            case NM_RCLICK:
                GetCursorPos(&pt);
                hti.pt = pt;
                ScreenToClient(hdr->hwndFrom, &hti.pt);
                if (TreeView_HitTest(hdr->hwndFrom, &hti) &&
                    (hti.flags & (TVHT_ONITEM | TVHT_ONITEMRIGHT))) {
                    SelectedTreeItem = hti.hItem;
                    TreeView_SelectItem(g_hwndObjectTree, SelectedTreeItem);
                    SendMessage(hwndStatusBar, WM_SETTEXT, 0, (LPARAM)g_WinObj.CurrentObjectPath);
                    supHandleTreePopupMenu(hwnd, &pt);
                }
                break;
            }
        }

        if (hdr->hwndFrom == g_hwndObjectList) {
            switch (hdr->code) {
            case NM_SETFOCUS:
                if (ListView_GetSelectionMark(g_hwndObjectList) == -1) {
                    lvitem.mask = LVIF_STATE;
                    lvitem.iItem = 0;
                    lvitem.state = LVIS_SELECTED | LVIS_FOCUSED;
                    lvitem.stateMask = LVIS_SELECTED | LVIS_FOCUSED;
                    ListView_SetItem(g_hwndObjectList, &lvitem);
                }

                break;
            case LVN_ITEMCHANGED:
                lvn = (LPNMLISTVIEW)lParam;
                RtlSecureZeroMemory(&item_string, sizeof(item_string));
                ListView_GetItemText(g_hwndObjectList, lvn->iItem, 0, item_string, MAX_PATH);
                lcp = _strlen(g_WinObj.CurrentObjectPath);
                if (lcp) {
                    str = supHeapAlloc((lcp + sizeof(item_string) + 4) * sizeof(WCHAR));
                    if (str == NULL)
                        break;
                    _strcpy(str, g_WinObj.CurrentObjectPath);

                    if ((str[0] == '\\') && (str[1] == 0)) {
                        _strcpy(str + lcp, item_string);
                    }
                    else {
                        str[lcp] = '\\';
                        _strcpy(str + lcp + 1, item_string);
                    }
                    SendMessage(hwndStatusBar, WM_SETTEXT, 0, (LPARAM)str);
                    supHeapFree(str);
                }
                break;

                //handle sort by column
            case LVN_COLUMNCLICK:
                bMainWndSortInverse = !bMainWndSortInverse;
                SortColumn = ((NMLISTVIEW *)lParam)->iSubItem;
                ListView_SortItemsEx(g_hwndObjectList, &MainWindowObjectListCompareFunc, SortColumn);

                RtlSecureZeroMemory(&col, sizeof(col));
                col.mask = LVCF_IMAGE;
                col.iImage = -1;

                for (c = 0; c < 3; c++)
                    ListView_SetColumn(g_hwndObjectList, c, &col);

                k = ImageList_GetImageCount(g_ListViewImages);
                if (bMainWndSortInverse)
                    col.iImage = k - 2;
                else
                    col.iImage = k - 1;

                ListView_SetColumn(g_hwndObjectList, ((NMLISTVIEW *)lParam)->iSubItem, &col);

                break;

            case NM_DBLCLK:
                MainWindowHandleObjectListProp(hwnd);
                break;

            default:
                break;
            }
        }

        //handle tooltip
        if (hdr->code == TTN_GETDISPINFO) {
            lpttt = (LPTOOLTIPTEXT)lParam;

            switch (lpttt->hdr.idFrom) {

            case ID_OBJECT_PROPERTIES:
            case ID_VIEW_REFRESH:
            case ID_FIND_FINDOBJECT:
                lpttt->hinst = g_WinObj.hInstance;
                lpttt->lpszText = MAKEINTRESOURCE(lpttt->hdr.idFrom);
                lpttt->uFlags |= TTF_DI_SETITEM;
                break;

            default:
                break;

            }
        }
    }
    return FALSE;
}
Пример #3
0
/*
* MainWindowHandleWMCommand
*
* Purpose:
*
* Main window WM_COMMAND handler.
*
*/
LRESULT MainWindowHandleWMCommand(
	_In_ HWND hwnd,
	_In_ WPARAM wParam,
	_In_ LPARAM lParam
	)
{
	LPWSTR		lpItemText;
	HWND		hwndFocus;


	UNREFERENCED_PARAMETER(lParam);

	switch (LOWORD(wParam)) {

	case ID_FILE_RUNASADMIN:
		supRunAsAdmin();
		break;

	case ID_FILE_EXIT:
		PostQuitMessage(0);
		break;

	case ID_OBJECT_PROPERTIES:
		hwndFocus = GetFocus();
		if (hwndFocus == ObjectList) {
			MainWindowHandleObjectListProp(hwnd);
		}
		if (hwndFocus == ObjectTree) {
			MainWindowHandleObjectTreeProp(hwnd);
		}
		break;

	case ID_OBJECT_GOTOLINKTARGET:
		lpItemText = supGetItemText(ObjectList, ListView_GetSelectionMark(ObjectList), 2, NULL);
		if (lpItemText) {
			if (_strcmpi(lpItemText, L"\\??") == 0) {
				ListToObject(L"\\GLOBAL??");
			}
			else {
				ListToObject(lpItemText);
			}
			HeapFree(GetProcessHeap(), 0, lpItemText);
		}
		else {
			lpItemText = supGetItemText(ObjectList, ListView_GetSelectionMark(ObjectList), 0, NULL);
			if (lpItemText) {
				if (
					(_strcmpi(lpItemText, L"GLOBALROOT") == 0) && 
					(_strcmpi(CurrentObjectPath, L"\\GLOBAL??") == 0)
					) 
				{
					ListToObject(L"\\");
				}
				HeapFree(GetProcessHeap(), 0, lpItemText);
			}
		}
		break;

	case ID_FIND_FINDOBJECT:
		FindDlgCreate(hwnd);
		break;

	case ID_VIEW_REFRESH:
		MainWindowOnRefresh(hwnd);
		break;

	case ID_EXTRAS_PIPES:
		extrasShowPipeDialog(hwnd);
		break;

	case ID_EXTRAS_USERSHAREDDATA:
		extrasShowUserSharedDataDialog(hwnd);
		break;

	case ID_EXTRAS_PRIVATENAMESPACES:
		extrasShowPrivateNamespacesDialog(hwnd);
		break;

	case ID_HELP_ABOUT:
		DialogBoxParam(g_hInstance, MAKEINTRESOURCE(IDD_DIALOG_ABOUT), 
			hwnd, (DLGPROC)&AboutDialogProc, 0);
		break;

	case ID_HELP_HELP:
		supShowHelp();
		break;

	default:
		break;
	}
	return FALSE;
}