Author: tkreuzer
Date: Fri Sep 28 02:29:26 2007
New Revision: 29261
URL: 
http://svn.reactos.org/svn/reactos?rev=29261&view=rev
Log:
gdihv:
- add base type mask
- change my email
- add deleted entries
- full row selection
Modified:
    trunk/rosapps/devutils/gdihv/gdi.h
    trunk/rosapps/devutils/gdihv/gdihv.c
    trunk/rosapps/devutils/gdihv/gdihv.rc
    trunk/rosapps/devutils/gdihv/handlelist.c
    trunk/rosapps/devutils/gdihv/mainwnd.c
    trunk/rosapps/devutils/gdihv/mainwnd.h
    trunk/rosapps/devutils/gdihv/proclist.c
Modified: trunk/rosapps/devutils/gdihv/gdi.h
URL:
http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/gdihv/gdi.h?rev=2…
==============================================================================
--- trunk/rosapps/devutils/gdihv/gdi.h (original)
+++ trunk/rosapps/devutils/gdihv/gdi.h Fri Sep 28 02:29:26 2007
@@ -9,12 +9,13 @@
 typedef PGDI_TABLE_ENTRY (CALLBACK * GDIQUERYPROC) (void);
 /* GDI handle table can hold 0x4000 handles */
-#define GDI_HANDLE_COUNT 0x4000
+#define GDI_HANDLE_COUNT 0x10000
 #define GDI_GLOBAL_PROCESS (0x0)
 /* Handle Masks and shifts */
 #define GDI_HANDLE_INDEX_MASK (GDI_HANDLE_COUNT - 1)
 #define GDI_HANDLE_TYPE_MASK  0x007f0000
+#define GDI_HANDLE_BASETYPE_MASK 0x001f0000
 #define GDI_HANDLE_STOCK_MASK 0x00800000
 #define GDI_HANDLE_REUSE_MASK 0xff000000
 #define GDI_HANDLE_REUSECNT_SHIFT 24
Modified: trunk/rosapps/devutils/gdihv/gdihv.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/gdihv/gdihv.c?rev…
==============================================================================
--- trunk/rosapps/devutils/gdihv/gdihv.c (original)
+++ trunk/rosapps/devutils/gdihv/gdihv.c Fri Sep 28 02:29:26 2007
@@ -3,7 +3,7 @@
  *
  *     gdihv.c
  *
- *     Copyright (C) 2007      Timo Kreuzer <timo <dot> kreuzer <at>
web.de>
+ *     Copyright (C) 2007      Timo Kreuzer <timo <dot> kreuzer <at>
reactos <dot> org>
  *
  *     This program is free software; you can redistribute it and/or modify
  *     it under the terms of the GNU General Public License as published by
Modified: trunk/rosapps/devutils/gdihv/gdihv.rc
URL:
http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/gdihv/gdihv.rc?re…
==============================================================================
--- trunk/rosapps/devutils/gdihv/gdihv.rc (original)
+++ trunk/rosapps/devutils/gdihv/gdihv.rc Fri Sep 28 02:29:26 2007
@@ -14,5 +14,3 @@
        PUSHBUTTON "Refresh processes", IDC_REFRESHPROCESS, 50, 230, 80, 14,
WS_CLIPSIBLINGS | WS_TABSTOP
 END
-
-
Modified: trunk/rosapps/devutils/gdihv/handlelist.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/gdihv/handlelist.…
==============================================================================
--- trunk/rosapps/devutils/gdihv/handlelist.c (original)
+++ trunk/rosapps/devutils/gdihv/handlelist.c Fri Sep 28 02:29:26 2007
@@ -3,7 +3,7 @@
  *
  *     handlelist.c
  *
- *     Copyright (C) 2007      Timo Kreuzer <timo <dot> kreuzer <at>
web.de>
+ *     Copyright (C) 2007      Timo Kreuzer <timo <dot> kreuzer <at>
reactos <dot> org>
  *
  *     This program is free software; you can redistribute it and/or modify
  *     it under the terms of the GNU General Public License as published by
@@ -71,7 +71,7 @@
        INT i, index;
        HANDLE handle;
        PGDI_TABLE_ENTRY pEntry;
-       LV_ITEM item;
+       LVITEM item;
        TCHAR strText[80];
        TCHAR* str2;
@@ -82,13 +82,17 @@
        for (i = 0; i<= GDI_HANDLE_COUNT; i++)
        {
                pEntry = &GdiHandleTable[i];
-               if (pEntry->KernelData)
+               if ( ((ProcessId != (HANDLE)1) && ((pEntry->Type &
GDI_HANDLE_BASETYPE_MASK) != 0)) ||
+                    ((ProcessId == (HANDLE)1) && ((pEntry->Type &
GDI_HANDLE_BASETYPE_MASK) == 0)) )
                {
-                       if (ProcessId == (HANDLE)-1 || ProcessId == pEntry->ProcessId)
+                       if (ProcessId == (HANDLE)1 ||
+                           ProcessId == (HANDLE)((ULONG)pEntry->ProcessId &
0xfffc))
                        {
+                               handle = GDI_HANDLE_CREATE(i, pEntry->Type);
                                index = ListView_GetItemCount(hHandleListCtrl);
                                item.iItem = index;
                                item.iSubItem = 0;
+                               item.lParam = (LPARAM)handle;
                                wsprintf(strText, L"%d", index);
                                (void)ListView_InsertItem(hHandleListCtrl, &item);
@@ -96,7 +100,6 @@
                                wsprintf(strText, L"%d", i);
                                ListView_SetItemText(hHandleListCtrl, index, 1, strText);
-                               handle = GDI_HANDLE_CREATE(i, pEntry->Type);
                                wsprintf(strText, L"%#08x", handle);
                                ListView_SetItemText(hHandleListCtrl, index, 2, strText);
Modified: trunk/rosapps/devutils/gdihv/mainwnd.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/gdihv/mainwnd.c?r…
==============================================================================
--- trunk/rosapps/devutils/gdihv/mainwnd.c (original)
+++ trunk/rosapps/devutils/gdihv/mainwnd.c Fri Sep 28 02:29:26 2007
@@ -3,7 +3,7 @@
  *
  *     mainwnd.c
  *
- *     Copyright (C) 2007      Timo Kreuzer <timo <dot> kreuzer <at>
web.de>
+ *     Copyright (C) 2007      Timo Kreuzer <timo <dot> kreuzer <at>
reactos <dot> org>
  *
  *     This program is free software; you can redistribute it and/or modify
  *     it under the terms of the GNU General Public License as published by
@@ -24,6 +24,59 @@
 INT g_Separator;
+
+static LRESULT
+MainWindow_OnSize(HWND hMainWnd)
+{
+       HWND hProcessListctrl, hHandleListCtrl, hProcessRefresh, hHandleRefresh;
+       RECT rect;
+
+       hProcessListctrl = GetDlgItem(hMainWnd, IDC_PROCESSLIST);
+       hHandleListCtrl = GetDlgItem(hMainWnd, IDC_HANDLELIST);
+       hProcessRefresh = GetDlgItem(hMainWnd, IDC_REFRESHPROCESS);
+       hHandleRefresh = GetDlgItem(hMainWnd, IDC_REFRESHHANDLE);
+
+       GetClientRect(hMainWnd, &rect);
+
+//g_Separator = (rect.right / 2);
+       MoveWindow(hProcessListctrl, 5, 5, g_Separator - 5, rect.bottom - 40, TRUE);
+       MoveWindow(hHandleListCtrl, g_Separator + 5, 5, rect.right - g_Separator - 5,
rect.bottom - 40, TRUE);
+       MoveWindow(hProcessRefresh, g_Separator - 90, rect.bottom - 30, 90, 25, TRUE);
+       MoveWindow(hHandleRefresh, rect.right - 90, rect.bottom - 30, 90, 25, TRUE);
+
+       return 0;
+}
+
+
+static LRESULT
+MainWnd_OnNotify(HWND hWnd, WPARAM wParam, LPARAM lParam)
+{
+       LPNMHDR pnmh = (LPNMHDR)lParam;
+
+       switch(pnmh->code)
+       {
+               case LVN_ITEMCHANGED:
+               {
+                       LPNMLISTVIEW pnmlv = (LPNMLISTVIEW)pnmh;
+                       if ((wParam == IDC_PROCESSLIST)
+                               && (pnmlv->uNewState & LVIS_SELECTED)
+                               && !(pnmlv->uOldState & LVIS_SELECTED))
+                       {
+                               LV_ITEM item;
+                               memset(&item, 0, sizeof(LV_ITEM));
+                               item.mask = LVIF_PARAM;
+                               item.iItem = pnmlv->iItem;
+                               (void)ListView_GetItem(GetDlgItem(hWnd, IDC_PROCESSLIST),
&item);
+                               HandleList_Update(GetDlgItem(hWnd, IDC_HANDLELIST),
(HANDLE)item.lParam);
+                               return TRUE;
+                       }
+                       break;
+               }
+       }
+
+       return 0;
+}
+
 INT_PTR CALLBACK
 MainWindow_WndProc(HWND hMainWnd, UINT message, WPARAM wParam, LPARAM lParam)
 {
@@ -34,6 +87,8 @@
                        RECT rect;
                        SendMessage(hMainWnd, WM_SETICON, ICON_BIG,
(LPARAM)LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_MAIN)));
+                       (void)ListView_SetExtendedListViewStyle(GetDlgItem(hMainWnd,
IDC_PROCESSLIST), LVS_EX_FULLROWSELECT);
+                       (void)ListView_SetExtendedListViewStyle(GetDlgItem(hMainWnd,
IDC_HANDLELIST), LVS_EX_FULLROWSELECT);
                        GetClientRect(hMainWnd, &rect);
                        g_Separator = (rect.right / 2);
                        HandleList_Create(GetDlgItem(hMainWnd, IDC_HANDLELIST));
@@ -43,10 +98,8 @@
                        break;
                }
                case WM_SIZE:
-               {
-                       MainWindow_OnSize(hMainWnd);
-                       break;
-               }
+                       return MainWindow_OnSize(hMainWnd);
+
                case WM_COMMAND:
                {
                        switch (LOWORD(wParam))
@@ -80,23 +133,10 @@
                        }
                        break;
                }
+
                case WM_NOTIFY:
-               {
-                       if (((LPNMLISTVIEW)lParam)->hdr.code == LVN_ITEMCHANGED
-                               && (wParam == IDC_PROCESSLIST)
-                               && (((LPNMLISTVIEW)lParam)->uNewState &
LVIS_SELECTED)
-                               && !(((LPNMLISTVIEW)lParam)->uOldState &
LVIS_SELECTED))
-                       {
-                               LV_ITEM item;
-                               memset(&item, 0, sizeof(LV_ITEM));
-                               item.mask = LVIF_PARAM;
-                               item.iItem = ((LPNMLISTVIEW)lParam)->iItem;
-                               (void)ListView_GetItem(GetDlgItem(hMainWnd,
IDC_PROCESSLIST), &item);
-                               HandleList_Update(GetDlgItem(hMainWnd, IDC_HANDLELIST),
(HANDLE)item.lParam);
-                               return TRUE;
-                               break;
-                       }
-               }
+                       return MainWnd_OnNotify(hMainWnd, wParam, lParam);
+
                default:
                {
                        return FALSE;
@@ -105,23 +145,3 @@
        return TRUE;
 }
-VOID
-MainWindow_OnSize(HWND hMainWnd)
-{
-       HWND hProcessListctrl, hHandleListCtrl, hProcessRefresh, hHandleRefresh;
-       RECT rect;
-
-       hProcessListctrl = GetDlgItem(hMainWnd, IDC_PROCESSLIST);
-       hHandleListCtrl = GetDlgItem(hMainWnd, IDC_HANDLELIST);
-       hProcessRefresh = GetDlgItem(hMainWnd, IDC_REFRESHPROCESS);
-       hHandleRefresh = GetDlgItem(hMainWnd, IDC_REFRESHHANDLE);
-
-       GetClientRect(hMainWnd, &rect);
-
-//g_Separator = (rect.right / 2);
-       MoveWindow(hProcessListctrl, 5, 5, g_Separator - 5, rect.bottom - 40, TRUE);
-       MoveWindow(hHandleListCtrl, g_Separator + 5, 5, rect.right - g_Separator - 5,
rect.bottom - 40, TRUE);
-       MoveWindow(hProcessRefresh, g_Separator - 90, rect.bottom - 30, 90, 25, TRUE);
-       MoveWindow(hHandleRefresh, rect.right - 90, rect.bottom - 30, 90, 25, TRUE);
-       return;
-}
Modified: trunk/rosapps/devutils/gdihv/mainwnd.h
URL:
http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/gdihv/mainwnd.h?r…
==============================================================================
--- trunk/rosapps/devutils/gdihv/mainwnd.h (original)
+++ trunk/rosapps/devutils/gdihv/mainwnd.h Fri Sep 28 02:29:26 2007
@@ -1,3 +1,2 @@
 INT_PTR CALLBACK MainWindow_WndProc(HWND, UINT, WPARAM, LPARAM);
-VOID MainWindow_OnSize(HWND hMainWnd);
Modified: trunk/rosapps/devutils/gdihv/proclist.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/gdihv/proclist.c?…
==============================================================================
--- trunk/rosapps/devutils/gdihv/proclist.c (original)
+++ trunk/rosapps/devutils/gdihv/proclist.c Fri Sep 28 02:29:26 2007
@@ -3,7 +3,7 @@
  *
  *     proclist.c
  *
- *     Copyright (C) 2007      Timo Kreuzer <timo <dot> kreuzer <at>
web.de>
+ *     Copyright (C) 2007      Timo Kreuzer <timo <dot> kreuzer <at>
reactos <dot> org>
  *
  *     This program is free software; you can redistribute it and/or modify
  *     it under the terms of the GNU General Public License as published by
@@ -44,7 +44,8 @@
 ProcessList_Update(HWND hListCtrl)
 {
        LV_ITEM item;
-       DWORD ProcessIds[1024], BytesReturned, cProcesses;
+       DWORD ProcessIds[1024], BytesReturned;
+       UINT cProcesses;
        HANDLE hProcess;
        WCHAR strText[MAX_PATH] = L"<unknown>";
        INT i;
@@ -63,12 +64,21 @@
        wsprintf(strText, L"%#08x", 0);
        ListView_SetItemText(hListCtrl, 0, 1, strText);
+       /* Insert "deleted" */
+       item.iItem = 1;
+       item.lParam = 1;
+       item.pszText = L"<deleted>";
+       (void)ListView_InsertItem(hListCtrl, &item);
+       item.pszText = strText;
+       wsprintf(strText, L"%#08x",1);
+       ListView_SetItemText(hListCtrl, 1, 1, strText);
+
        if (!EnumProcesses(ProcessIds, sizeof(ProcessIds), &BytesReturned ))
        {
                return;
        }
        cProcesses = BytesReturned / sizeof(DWORD);
-       if (cProcesses == 0)
+       if (cProcesses <= 1)
        {
                return;
        }
@@ -80,7 +90,7 @@
                hProcess = 0;
                /* FIXME: HACK: ROS crashes when using OpenProcess with PROCESS_VM_READ */
-//             hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE,
ProcessIds[i]);
+               hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE,
ProcessIds[i]);
                if (hProcess)
                {
                        GetModuleBaseName(hProcess, NULL, (LPWSTR)strText, MAX_PATH );