~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Wine Cross Reference
wine/programs/taskmgr/debug.c

Version: ~ [ wine-1.5.31 ] ~ [ wine-1.5.30 ] ~ [ wine-1.5.29 ] ~ [ wine-1.5.28 ] ~ [ wine-1.5.27 ] ~ [ wine-1.5.26 ] ~ [ wine-1.5.25 ] ~ [ wine-1.5.24 ] ~ [ wine-1.5.23 ] ~ [ wine-1.5.22 ] ~ [ wine-1.5.21 ] ~ [ wine-1.5.20 ] ~ [ wine-1.5.19 ] ~ [ wine-1.5.18 ] ~ [ wine-1.5.17 ] ~ [ wine-1.5.16 ] ~ [ wine-1.5.15 ] ~ [ wine-1.5.14 ] ~ [ wine-1.5.13 ] ~ [ wine-1.5.12 ] ~ [ wine-1.5.11 ] ~ [ wine-1.5.10 ] ~ [ wine-1.5.9 ] ~ [ wine-1.5.8 ] ~ [ wine-1.5.7 ] ~ [ wine-1.4.1 ] ~ [ wine-1.5.6 ] ~ [ wine-1.5.5 ] ~ [ wine-1.5.4 ] ~ [ wine-1.5.3 ] ~ [ wine-1.5.2 ] ~ [ wine-1.5.1 ] ~ [ wine-1.5.0 ] ~ [ wine-1.4 ] ~ [ wine-1.4-rc6 ] ~ [ wine-1.4-rc5 ] ~ [ wine-1.4-rc4 ] ~ [ wine-1.4-rc3 ] ~ [ wine-1.4-rc2 ] ~ [ wine-1.4-rc1 ] ~ [ wine-1.3.37 ] ~ [ wine-1.3.36 ] ~ [ wine-1.3.35 ] ~ [ wine-1.3.34 ] ~ [ wine-1.3.33 ] ~ [ wine-1.3.32 ] ~ [ wine-1.3.31 ] ~ [ wine-1.3.30 ] ~ [ wine-1.3.29 ] ~ [ wine-1.3.28 ] ~ [ wine-1.3.27 ] ~ [ wine-1.3.26 ] ~ [ wine-1.3.25 ] ~ [ wine-1.3.24 ] ~ [ wine-1.3.23 ] ~ [ wine-1.3.22 ] ~ [ wine-1.3.21 ] ~ [ wine-1.3.20 ] ~ [ wine-1.3.19 ] ~ [ wine-1.3.18 ] ~ [ wine-1.2.3 ] ~ [ wine-1.3.17 ] ~ [ wine-1.3.16 ] ~ [ wine-1.3.15 ] ~ [ wine-1.3.14 ] ~ [ wine-1.3.13 ] ~ [ wine-1.3.12 ] ~ [ wine-1.3.11 ] ~ [ wine-1.3.10 ] ~ [ wine-1.3.9 ] ~ [ wine-1.2.2 ] ~ [ wine-1.3.8 ] ~ [ wine-1.3.7 ] ~ [ wine-1.3.6 ] ~ [ wine-1.3.5 ] ~ [ wine-1.2.1 ] ~ [ wine-1.3.4 ] ~ [ wine-1.3.3 ] ~ [ wine-1.3.2 ] ~ [ wine-1.3.1 ] ~ [ wine-1.3.0 ] ~ [ wine-1.2 ] ~ [ wine-1.2-rc7 ] ~ [ wine-1.2-rc6 ] ~ [ wine-1.2-rc5 ] ~ [ wine-1.2-rc4 ] ~ [ wine-1.2-rc3 ] ~ [ wine-1.2-rc2 ] ~ [ wine-1.2-rc1 ] ~ [ wine-1.1.44 ] ~ [ wine-1.1.43 ] ~ [ wine-1.1.42 ] ~ [ wine-1.1.41 ] ~ [ wine-1.1.40 ] ~ [ wine-1.1.39 ] ~ [ wine-1.1.38 ] ~ [ wine-1.1.37 ] ~ [ wine-1.1.36 ] ~ [ wine-1.1.35 ] ~ [ wine-1.1.34 ] ~ [ wine-1.1.33 ] ~ [ wine-1.1.32 ] ~ [ wine-1.1.31 ] ~ [ wine-1.1.30 ] ~ [ wine-1.1.29 ] ~ [ wine-1.1.28 ] ~ [ wine-1.1.27 ] ~ [ wine-1.1.26 ] ~ [ wine-1.1.25 ] ~ [ wine-1.1.24 ] ~ [ wine-1.1.23 ] ~ [ wine-1.1.22 ] ~ [ wine-1.1.21 ] ~ [ wine-1.1.20 ] ~ [ wine-1.1.19 ] ~ [ wine-1.1.18 ] ~ [ wine-1.1.17 ] ~ [ wine-1.1.16 ] ~ [ wine-1.1.15 ] ~ [ wine-1.1.14 ] ~ [ wine-1.1.13 ] ~ [ wine-1.1.12 ] ~ [ wine-1.1.11 ] ~ [ wine-1.1.10 ] ~ [ wine-1.1.9 ] ~ [ wine-1.1.8 ] ~ [ wine-1.1.7 ] ~ [ wine-1.0.1 ] ~ [ wine-1.1.6 ] ~ [ wine-1.1.5 ] ~ [ wine-1.1.4 ] ~ [ wine-1.1.3 ] ~ [ wine-1.1.2 ] ~ [ wine-1.1.1 ] ~ [ wine-1.1.0 ] ~ [ wine-1.0 ] ~

  1 /*
  2  *  ReactOS Task Manager
  3  *
  4  *  debug.c
  5  *
  6  *  Copyright (C) 1999 - 2001  Brian Palmer  <brianp@reactos.org>
  7  *  Copyright (C) 2008  Vladimir Pankratov
  8  *
  9  * This library is free software; you can redistribute it and/or
 10  * modify it under the terms of the GNU Lesser General Public
 11  * License as published by the Free Software Foundation; either
 12  * version 2.1 of the License, or (at your option) any later version.
 13  *
 14  * This library is distributed in the hope that it will be useful,
 15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 17  * Lesser General Public License for more details.
 18  *
 19  * You should have received a copy of the GNU Lesser General Public
 20  * License along with this library; if not, write to the Free Software
 21  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 22  */
 23 
 24 #define WIN32_LEAN_AND_MEAN    /* Exclude rarely-used stuff from Windows headers */
 25 #include <windows.h>
 26 #include <commctrl.h>
 27 #include <stdlib.h>
 28 #include <memory.h>
 29 #include <stdio.h>
 30 #include <winnt.h>
 31 
 32 #include "wine/unicode.h"
 33 #include "taskmgr.h"
 34 #include "perfdata.h"
 35 
 36 void ProcessPage_OnDebug(void)
 37 {
 38     LVITEMW              lvitem;
 39     ULONG                Index;
 40     DWORD                dwProcessId;
 41     WCHAR                wstrErrorText[256];
 42     HKEY                 hKey;
 43     WCHAR                wstrDebugPath[256];
 44     WCHAR                wstrDebugger[256];
 45     DWORD                dwDebuggerSize;
 46     PROCESS_INFORMATION  pi;
 47     STARTUPINFOW         si;
 48     HANDLE               hDebugEvent;
 49 
 50     WCHAR    wszWarnTitle[255];
 51     WCHAR    wszUnable2Debug[255];
 52     WCHAR    wszWarnMsg[255];
 53 
 54     static const WCHAR    wszSubKey[] = {'S','o','f','t','w','a','r','e','\\',
 55                                          'M','i','c','r','o','s','o','f','t','\\',
 56                                          'W','i','n','d','o','w','s',' ','N','T','\\',
 57                                          'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\',
 58                                          'A','e','D','e','b','u','g',0};
 59     static const WCHAR    wszDebugger[] = {'D','e','b','u','g','g','e','r',0};
 60 
 61     LoadStringW(hInst, IDS_WARNING_TITLE, wszWarnTitle, sizeof(wszWarnTitle)/sizeof(WCHAR));
 62     LoadStringW(hInst, IDS_DEBUG_UNABLE2DEBUG, wszUnable2Debug, sizeof(wszUnable2Debug)/sizeof(WCHAR));
 63     LoadStringW(hInst, IDS_DEBUG_MESSAGE, wszWarnMsg, sizeof(wszWarnMsg)/sizeof(WCHAR));
 64 
 65     for (Index=0; Index<(ULONG)ListView_GetItemCount(hProcessPageListCtrl); Index++)
 66     {
 67         lvitem.mask = LVIF_STATE;
 68         lvitem.stateMask = LVIS_SELECTED;
 69         lvitem.iItem = Index;
 70         lvitem.iSubItem = 0;
 71 
 72         SendMessageW(hProcessPageListCtrl, LVM_GETITEMW, 0, (LPARAM) &lvitem);
 73 
 74         if (lvitem.state & LVIS_SELECTED)
 75             break;
 76     }
 77 
 78     dwProcessId = PerfDataGetProcessId(Index);
 79 
 80     if ((ListView_GetSelectedCount(hProcessPageListCtrl) != 1) || (dwProcessId == 0))
 81         return;
 82 
 83     if (MessageBoxW(hMainWnd, wszWarnMsg, wszWarnTitle, MB_YESNO|MB_ICONWARNING) != IDYES)
 84     {
 85         GetLastErrorText(wstrErrorText, sizeof(wstrErrorText)/sizeof(WCHAR));
 86         MessageBoxW(hMainWnd, wstrErrorText, wszUnable2Debug, MB_OK|MB_ICONSTOP);
 87         return;
 88     }
 89 
 90     if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, wszSubKey, 0, KEY_READ, &hKey) != ERROR_SUCCESS)
 91     {
 92         GetLastErrorText(wstrErrorText, sizeof(wstrErrorText)/sizeof(WCHAR));
 93         MessageBoxW(hMainWnd, wstrErrorText, wszUnable2Debug, MB_OK|MB_ICONSTOP);
 94         return;
 95     }
 96 
 97     dwDebuggerSize = 260;
 98     if (RegQueryValueExW(hKey, wszDebugger, NULL, NULL, (LPBYTE)wstrDebugger, &dwDebuggerSize) != ERROR_SUCCESS)
 99     {
100         GetLastErrorText(wstrErrorText, sizeof(wstrErrorText)/sizeof(WCHAR));
101         MessageBoxW(hMainWnd, wstrErrorText, wszUnable2Debug, MB_OK|MB_ICONSTOP);
102         RegCloseKey(hKey);
103         return;
104     }
105 
106     RegCloseKey(hKey);
107 
108     hDebugEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
109     if (!hDebugEvent)
110     {
111         GetLastErrorText(wstrErrorText, sizeof(wstrErrorText)/sizeof(WCHAR));
112         MessageBoxW(hMainWnd, wstrErrorText, wszUnable2Debug, MB_OK|MB_ICONSTOP);
113         return;
114     }
115 
116     wsprintfW(wstrDebugPath, wstrDebugger, dwProcessId, hDebugEvent);
117 
118     memset(&pi, 0, sizeof(PROCESS_INFORMATION));
119     memset(&si, 0, sizeof(STARTUPINFOW));
120     si.cb = sizeof(STARTUPINFOW);
121     if (!CreateProcessW(NULL, wstrDebugPath, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
122     {
123         GetLastErrorText(wstrErrorText, sizeof(wstrErrorText)/sizeof(WCHAR));
124         MessageBoxW(hMainWnd, wstrErrorText, wszUnable2Debug, MB_OK|MB_ICONSTOP);
125     }
126 
127     CloseHandle(hDebugEvent);
128 }
129 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.