Exemplo n.º 1
0
/*
* FindDlgHandleNotify
*
* Purpose:
*
* WM_NOTIFY processing for FindDlg listview.
*
*/
VOID FindDlgHandleNotify(
    LPNMLISTVIEW	nhdr
)
{
    INT      c, k;
    LPWSTR   lpItemText;
    LVCOLUMN col;

    if (nhdr == NULL)
        return;

    if (nhdr->hdr.idFrom != ID_SEARCH_LIST)
        return;

    switch (nhdr->hdr.code) {

    case LVN_ITEMCHANGED:
        if (!(nhdr->uNewState & LVIS_SELECTED))
            break;

        lpItemText = supGetItemText(nhdr->hdr.hwndFrom, nhdr->iItem, 0, NULL);
        if (lpItemText) {
            ListToObject(lpItemText);
            HeapFree(GetProcessHeap(), 0, lpItemText);
        }
        break;

    case LVN_COLUMNCLICK:
        bFindDlgSortInverse = !bFindDlgSortInverse;
        FindDlgSortColumn = ((NMLISTVIEW *)nhdr)->iSubItem;
        ListView_SortItemsEx(FindDlgList, &FindDlgCompareFunc, FindDlgSortColumn);

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

        for (c = 0; c < 2; c++)
            ListView_SetColumn(FindDlgList, c, &col);

        k = ImageList_GetImageCount(ListViewImages);
        if (bFindDlgSortInverse)
            col.iImage = k - 2;
        else
            col.iImage = k - 1;

        ListView_SetColumn(FindDlgList, ((NMLISTVIEW *)nhdr)->iSubItem, &col);
        break;

    default:
        break;
    }
}
Exemplo n.º 2
0
/*
* MainWindowOnRefresh
*
* Purpose:
*
* Main Window Refresh handler.
*
*/
VOID MainWindowOnRefresh(
	_In_ HWND hwnd
	)
{
	LPWSTR	CurrentObject;
	SIZE_T	len;

	UNREFERENCED_PARAMETER(hwnd);

	supSetWaitCursor(TRUE);

	if (g_kdctx.hDevice != NULL) {
		ObListDestroy(&g_kdctx.ObjectList);
		if (g_kdctx.hThreadWorker) {
			WaitForSingleObject(g_kdctx.hThreadWorker, INFINITE);
			CloseHandle(g_kdctx.hThreadWorker);
			g_kdctx.hThreadWorker = NULL;
		}

		//query object list info
		g_kdctx.hThreadWorker = CreateThread(NULL, 0,
			kdQueryProc,
			&g_kdctx, 0, NULL);
	}

	supFreeSCMSnapshot(g_enumParams.scmSnapshot);
	sapiFreeSnapshot(g_enumParams.sapiDB);
	RtlSecureZeroMemory(&g_enumParams, sizeof(g_enumParams));
	g_enumParams.scmSnapshot = supCreateSCMSnapshot(&g_enumParams.scmNumberOfEntries);
	g_enumParams.sapiDB = sapiCreateSetupDBSnapshot();
	g_enumParams.lpSubDirName = CurrentObjectPath;

	len = _strlen(CurrentObjectPath);
	CurrentObject = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (len + 1)*sizeof(WCHAR));
	if (CurrentObject)
		_strcpy(CurrentObject, CurrentObjectPath);

	TreeView_DeleteAllItems(ObjectTree);
	ListObjectDirectoryTree(L"\\", NULL, NULL);
	TreeView_SelectItem(ObjectTree, TreeView_GetRoot(ObjectTree));

	if (CurrentObject) {
		ListToObject(CurrentObject);
		HeapFree(GetProcessHeap(), 0, CurrentObject);
	}

	supSetWaitCursor(FALSE);
}
Exemplo n.º 3
0
/*
* MainWindowOnRefresh
*
* Purpose:
*
* Main Window Refresh handler.
*
*/
VOID MainWindowOnRefresh(
    _In_ HWND hwnd
)
{
    LPWSTR  CurrentPath = NULL;
    SIZE_T  len;

    UNREFERENCED_PARAMETER(hwnd);

    supSetWaitCursor(TRUE);

    if (g_kdctx.hDevice != NULL) {
        ObListDestroy(&g_kdctx.ObjectList);
        if (g_kdctx.hThreadWorker) {
            WaitForSingleObject(g_kdctx.hThreadWorker, INFINITE);
            CloseHandle(g_kdctx.hThreadWorker);
            g_kdctx.hThreadWorker = NULL;
        }

        //query object list info
        g_kdctx.hThreadWorker = CreateThread(NULL, 0,
            kdQueryProc,
            &g_kdctx, 0, NULL);
    }

    supFreeSCMSnapshot();
    sapiFreeSnapshot();

    supCreateSCMSnapshot();
    sapiCreateSetupDBSnapshot();

    len = _strlen(g_WinObj.CurrentObjectPath);
    CurrentPath = supHeapAlloc((len + 1) * sizeof(WCHAR));
    if (CurrentPath)
        _strcpy(CurrentPath, g_WinObj.CurrentObjectPath);

    TreeView_DeleteAllItems(g_hwndObjectTree);
    ListObjectDirectoryTree(L"\\", NULL, NULL);
    TreeView_SelectItem(g_hwndObjectTree, TreeView_GetRoot(g_hwndObjectTree));

    if (CurrentPath) {
        ListToObject(CurrentPath);
        supHeapFree(CurrentPath);
    }

    supSetWaitCursor(FALSE);
}
Exemplo n.º 4
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;
}
Exemplo n.º 5
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;
}