Ejemplo n.º 1
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);
}
Ejemplo n.º 2
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);
}
Ejemplo n.º 3
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;
}
Ejemplo n.º 4
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;
}