purebasic.info

PureBasic forum
Текущее время: Ср янв 17, 2018 5:54 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 129 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Вс май 05, 2013 12:42 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
MrF писал(а):
а нет идей, как сдампить х64 процесс?

Вот так у меня получилось
Ахтунг, компилировать и запускать в 64 битной среде (и компилятор естественно 64)
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
Structure IMAGE_OPTIONAL_HEADER32
  Magic.w
  MajorLinkerVersion.b
  MinorLinkerVersion.b
  SizeOfCode.l
  SizeOfInitializedData.l
  SizeOfUninitializedData.l
  AddressOfEntryPoint.l
  BaseOfCode.l
  BaseOfData.l                             ; в х64 архитектуре убрано                  
  ImageBase.l                              ; в х64 архитектуре расширено до 8 bytes (64-bit)
  SectionAlignment.l
  FileAlignment.l
  MajorOperatingSystemVersion.w
  MinorOperatingSystemVersion.w
  MajorImageVersion.w
  MinorImageVersion.w
  MajorSubsystemVersion.w
  MinorSubsystemVersion.w
  Win32VersionValue.l
  SizeOfImage.l
  SizeOfHeaders.l
  CheckSum.l
  Subsystem.w
  DllCharacteristics.w
  SizeOfStackReserve.l                     ; в х64 архитектуре расширено до 8 bytes (64-bit)
  SizeOfStackCommit.l                      ; в х64 архитектуре расширено до 8 bytes (64-bit)
  SizeOfHeapReserve.l                      ; в х64 архитектуре расширено до 8 bytes (64-bit)
  SizeOfHeapCommit.l                       ; в х64 архитектуре расширено до 8 bytes (64-bit)
  LoaderFlags.l
  NumberOfRvaAndSizes.l
  DataDirectory.IMAGE_DATA_DIRECTORY[16]
EndStructure
 
Structure IMAGE_NT_HEADERS32
  Signature.l
  FileHeader.IMAGE_FILE_HEADER
  OptionalHeader.IMAGE_OPTIONAL_HEADER32
EndStructure
 
Structure IMAGE_SECTION_HEADER
  SecName.b[8]
  StructureUnion
    PhysicalAddr.l
    VirtualSize.l
  EndStructureUnion
  VirtualAddress.l
  SizeOfRawData.l
  PointerToRawData.l
  PointerToRelocations.l
  PointerToLinenumbers.l
  NumberOfRelocations.w
  NumberOfLinenumbers.w
  Characteristics.l
EndStructure
 
Structure IMAGE_SECTION_HEADERS
  ish.IMAGE_SECTION_HEADER[64]
EndStructure
 
 
 
Prototype.i PFNENUMPROCESSMODULESeX(hProcess.l, lphModule, cb.l, lpcbNeeded.l, dwFilterFlag.l)
Prototype.i PFNGETMODULEFILENAMEEXA(hProcess.l,  hModule.l, lpFilename.l, nSize.l)
  #LIST_MODULES_32BIT = 1   ; List the 32-bit modules.
  #LIST_MODULES_64BIT = 2   ; List the 64-bit modules.
  #LIST_MODULES_ALL = 3     ; List all modules.
  #LIST_MODULES_DEFAULT = 0
Prototype  QueryFullProcessImageName(hProcess, dwFlags, lpExeName, lpdwSize)
Prototype  PFNENUMPROCESSMODULES(hProcess, *lphModule, cb, lpcbNeeded)
Prototype PROTOIsWow64Process(a, b)
Global popup.b, Callback
Enumeration
  #Window_0
EndEnumeration  
Enumeration
  #ListIcon_0
  #Font_ListIcon_0
  #ListIcon_1
  #Font_ListIcon_1
  #Splitter_2
  #StatusBar
EndEnumeration  
Procedure GetModules(processID.l)                        ; Пробуем получть список модулей х64 процесса и х32
     Protected Dim hMods.i(0), hProcess.l, cbNeeded.l, i.l, nameFile.s = Space(512)
     Protected EnumProcessModulesEx.PFNENUMPROCESSMODULESeX
     Protected GetModuleFileName.PFNGETMODULEFILENAMEEXA
      hProcess = OpenProcess_(#PROCESS_QUERY_INFORMATION|#PROCESS_VM_READ, #False, processID)
      If hProcess
             PSAPI = OpenLibrary(#PB_Any,"PSAPI.DLL")
        If PSAPI
             EnumProcessModulesEx   = GetFunction(PSAPI, "EnumProcessModulesEx")
             GetModuleFileName      = GetFunction(PSAPI, "GetModuleFileNameExA")
          If EnumProcessModulesEx(hProcess, hMods(), 0, @lpcbNeeded, #LIST_MODULES_ALL);    Пробуем получить lpcbNeeded          
             ReDim  hMods(lpcbNeeded/SizeOf(Integer))    
             steps = lpcbNeeded / SizeOf(Integer)
             If EnumProcessModulesEx(hProcess, hMods(), lpcbNeeded, @lpcbNeeded, #LIST_MODULES_ALL)
                For i = 0 To steps
                   GetModuleFileName(hProcess, hMods(i), @nameFile, 512)
                   AddGadgetItem(#ListIcon_1, -1, UCase(GetFilePart(nameFile))+Chr(10)+nameFile+Chr(10)+RSet(Hex(hMods(i), #PB_Quad), 16, "0"))
                Next i    
             EndIf
          EndIf  
        CloseHandle_(hProcess)
        EndIf
      EndIf
EndProcedure
 
Procedure LIcallback(hwnd, msg, wparam, lparam)
  result = CallWindowProc_(Callback, hwnd, msg, wparam, lparam)
  Select msg
   Case #WM_RBUTTONDOWN
     If popup = 1 : DisplayPopupMenu(0, WindowID(#Window_0)) : EndIf
  EndSelect
  ProcedureReturn result
EndProcedure
 
Procedure.s FilePath(pid)
  Protected buffer$, bufferSize, hProcess, libID, QueryFullProcessImageName.QueryFullProcessImageName
        hProcess = OpenProcess_(#PROCESS_QUERY_INFORMATION, 0, pid)
        If hProcess
          libID = OpenLibrary(#PB_Any, "kernel32.dll")
          If libID
            bufferSize = 1024
            buffer$ = Space(bufferSize)
            QueryFullProcessImageName = GetFunction(libID, "QueryFullProcessImageNameA")
            If QueryFullProcessImageName
              result = QueryFullProcessImageName(hProcess, 0, @buffer$, @bufferSize)
            EndIf
            CloseLibrary(libID)
          EndIf
          CloseHandle_(hProcess)
        EndIf
  ProcedureReturn buffer$
EndProcedure
 
Procedure DumpProcess64(pid, name.s)
  Protected *idh.IMAGE_DOS_HEADER            
  Protected *ish.IMAGE_SECTION_HEADERS  
  Protected *inh.IMAGE_NT_HEADERS               ; для х64
  Protected hProcess
  Protected hSnapShot
  Protected *bufer
  Protected i
  Protected flag.b = 0
  Protected me32.MODULEENTRY32
 
   me32\dwSize = SizeOf(MODULEENTRY32)
   hSnapShot = CreateToolhelp32Snapshot_(#TH32CS_SNAPMODULE, pid)
   If hSnapShot > 0
     Module32First_(hSnapShot, me32)
     CloseHandle_(hSnapShot)
   Else  
     file$ = GetGadgetItemText(#ListIcon_0, GetGadgetState(#ListIcon_0) , 0)
     If file$
         hFile = CreateFile_(file$,#GENERIC_READ,#FILE_SHARE_READ|#FILE_SHARE_WRITE,#Null,#OPEN_EXISTING,GetFileAttributes_(file$),#Null)      
         If hFile = #INVALID_HANDLE_VALUE
           ProcedureReturn flag
         Else
           lenFile  = GetFileSize_(hFile, #Null)
           hFileMap = CreateFileMapping_(hFile, #Null, #PAGE_WRITECOPY, 0, 0, #Null)
           MapVOF   = MapViewOfFile_(hFileMap, #FILE_MAP_READ, 0, 0, lenFile)
           CloseHandle_(hFile)                                                  
         EndIf
         If MapVOF
             *idh = MapVOF
             *inh = MapVOF + *idh\e_lfanew
             *ish = *inh\OptionalHeader + *inh\FileHeader\SizeOfOptionalHeader
             me32\modBaseAddr = *inh\OptionalHeader\ImageBase
             me32\modBaseSize = *inh\OptionalHeader\SizeOfImage
             UnmapViewOfFile_(MapVOF)
         EndIf
      EndIf          
    EndIf
    hProcess = OpenProcess_(#PROCESS_QUERY_INFORMATION|#PROCESS_VM_READ, #False, pid)
      If hProcess
           *bufer = AllocateMemory(me32\modBaseSize)
           If  ReadProcessMemory_(hProcess, me32\modBaseAddr, *bufer, me32\modBaseSize, @lpNumberOfBytesRead )
             *idh = *bufer
             *inh = *bufer + *idh\e_lfanew
             *ish = *inh\OptionalHeader + *inh\FileHeader\SizeOfOptionalHeader
               ; Читаем и записываем в *bufer PE Header
             If ReadProcessMemory_(hProcess, me32\modBaseAddr, *bufer, *inh\OptionalHeader\SizeOfHeaders, @lpNumberOfBytesRead )
               flag = 1
             EndIf  
             For i = 0 To *inh\FileHeader\NumberOfSections - 1
               ; Читаем и записываем в *bufer секции файла
               If ReadProcessMemory_(hProcess, me32\modBaseAddr + *ish\ish[i]\VirtualAddress, *bufer + *ish\ish[i]\PointerToRawData, *ish\ish[i]\SizeOfRawData, @lpNumberOfBytesRead )
                 flag.b = 1
               Else
                 flag.b = 0
               EndIf
             Next i
           EndIf
      EndIf
      If flag
        If CreateFile(0, name)          
          WriteData(0, *bufer, me32\modBaseSize)
          CloseFile(0)
          flag = 1  
        Else
          flag = 0  
        EndIf
      EndIf
      If hProcess : CloseHandle_(hProcess) : EndIf
      If *bufer : FreeMemory(*bufer) : EndIf
  ProcedureReturn flag
EndProcedure
 
Procedure DumpProcess32(pid, name.s)
  Protected *idh.IMAGE_DOS_HEADER            
  Protected *ish.IMAGE_SECTION_HEADERS  
  Protected *inh.IMAGE_NT_HEADERS32               ; для х32
  Protected hProcess
  Protected hSnapShot
  Protected *bufer
  Protected i
  Protected flag.b = 0
  Protected me32.MODULEENTRY32
 
   me32\dwSize = SizeOf(MODULEENTRY32)
   hSnapShot = CreateToolhelp32Snapshot_(#TH32CS_SNAPMODULE, pid)
   If hSnapShot > 0
     Module32First_(hSnapShot, me32)
     CloseHandle_(hSnapShot)
   Else  
     file$ = GetGadgetItemText(#ListIcon_0, GetGadgetState(#ListIcon_0) , 0)
     If file$
         hFile = CreateFile_(file$,#GENERIC_READ,#FILE_SHARE_READ|#FILE_SHARE_WRITE,#Null,#OPEN_EXISTING,GetFileAttributes_(file$),#Null)      
         If hFile = #INVALID_HANDLE_VALUE
           ProcedureReturn flag
         Else
           lenFile  = GetFileSize_(hFile, #Null)
           hFileMap = CreateFileMapping_(hFile, #Null, #PAGE_WRITECOPY, 0, 0, #Null)
           MapVOF   = MapViewOfFile_(hFileMap, #FILE_MAP_READ, 0, 0, lenFile)
           CloseHandle_(hFile)                                                  
         EndIf
         If MapVOF
             *idh = MapVOF
             *inh = MapVOF + *idh\e_lfanew
             *ish = *inh\OptionalHeader + *inh\FileHeader\SizeOfOptionalHeader
             me32\modBaseAddr = *inh\OptionalHeader\ImageBase
             me32\modBaseSize = *inh\OptionalHeader\SizeOfImage
             UnmapViewOfFile_(MapVOF)
         EndIf
      EndIf          
    EndIf
    hProcess = OpenProcess_(#PROCESS_QUERY_INFORMATION|#PROCESS_VM_READ, #False, pid)
      If hProcess
           *bufer = AllocateMemory(me32\modBaseSize)
           If  ReadProcessMemory_(hProcess, me32\modBaseAddr, *bufer, me32\modBaseSize, @lpNumberOfBytesRead )
             *idh = *bufer
             *inh = *bufer + *idh\e_lfanew
             *ish = *inh\OptionalHeader + *inh\FileHeader\SizeOfOptionalHeader
               ; Читаем и записываем в *bufer PE Header
             If ReadProcessMemory_(hProcess, me32\modBaseAddr, *bufer, *inh\OptionalHeader\SizeOfHeaders, @lpNumberOfBytesRead )
               flag = 1
             EndIf  
             For i = 0 To *inh\FileHeader\NumberOfSections - 1
               ; Читаем и записываем в *bufer секции файла
               If ReadProcessMemory_(hProcess, me32\modBaseAddr + *ish\ish[i]\VirtualAddress, *bufer + *ish\ish[i]\PointerToRawData, *ish\ish[i]\SizeOfRawData, @lpNumberOfBytesRead )
                 flag.b = 1
               Else
                 flag.b = 0
               EndIf
             Next i
           EndIf
      EndIf
      If flag
        If CreateFile(0, name)          
          WriteData(0, *bufer, me32\modBaseSize)
          CloseFile(0)
          flag = 1  
        Else
          flag = 0  
        EndIf
      EndIf
      If hProcess : CloseHandle_(hProcess) : EndIf
      If *bufer : FreeMemory(*bufer) : EndIf
  ProcedureReturn flag
EndProcedure
 
 
Procedure EnableDebugPrivNT(aPrivilegeName.s)
    DebugValue.LUID
    tkp.TOKEN_PRIVILEGES
    ; Retrieve a handle of the access token
    If Not OpenProcessToken_(GetCurrentProcess_(),#TOKEN_ADJUST_PRIVILEGES|#TOKEN_QUERY,@hToken)
       ProcedureReturn #False;
    EndIf
    ; Enable the SE_DEBUG_NAME privilege  
    If Not LookupPrivilegeValue_("", aPrivilegeName, @DebugValue)
       CloseHandle_(hToken)
       ProcedureReturn #False;
    EndIf
    NewState.TOKEN_PRIVILEGES
    With NewState
      \PrivilegeCount=1
      \Privileges[0]\Luid\HighPart=DebugValue\HighPart
      \Privileges[0]\Luid\LowPart=DebugValue\LowPart
      \Privileges[0]\Attributes=#SE_PRIVILEGE_ENABLED
    EndWith
    AdjustTokenPrivileges_(hToken,#False,@NewState,SizeOf(TOKEN_PRIVILEGES),@PreviousState.TOKEN_PRIVILEGES,@ReturnLength)
    If hToken : CloseHandle_(hToken) : EndIf
    ProcedureReturn #True
EndProcedure
Procedure ExtractIco(filename.s)
   ico = ExtractIcon_(0, filename, 0)
   If  Not ico
      systemdir$=Space(255)  
      GetSystemDirectory_(@systemdir$, 255)  
      ico = ExtractIcon_(0,systemdir$+ "\shell32.dll",2)
   EndIf
   ProcedureReturn ico    
EndProcedure
 
Procedure GetProcessesList()
 Protected ExitCode, Wow64Process, pid, libPSapi, libID
 Protected hp, processname.s = Space(256)
 Protected RetVal.b = #True;
 Protected process.PROCESSENTRY32
 process\dwSize = SizeOf(PROCESSENTRY32)
 Protected hSnap = CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS, #Null)
 Protected IsWow64Process.PROTOIsWow64Process
 Protected GetModuleFileNameEx.PFNGETMODULEFILENAMEEXA
 libPSapi = OpenLibrary(#PB_Any, "psapi.dll")
 libID = OpenLibrary(#PB_Any, "kernel32.dll")
 
If libPSapi And libID
  GetModuleFileNameEx = GetFunction(libPSapi,"GetModuleFileNameExA")
  IsWow64Process = GetFunction(libID, "IsWow64Process")              
               
  If hSnap
    If Process32First_(hSnap, @process)
      While Process32Next_(hSnap, @process)
            pid = process\th32ProcessID
            hp = OpenProcess_(#PROCESS_QUERY_INFORMATION|#PROCESS_VM_READ, #True, pid)
            If hp
                  IsWow64Process(hp, @Wow64Process)
                  If Wow64Process
                     GetModuleFileNameEx(hp, #Null, @processname, #MAX_PATH)
                     AddGadgetItem(#ListIcon_0, -1, processname+Chr(10)+Str(pid),ExtractIco(processname) )
                  Else  
                     file$ = FilePath(pid)
                     AddGadgetItem(#ListIcon_0, -1, file$+Chr(10)+Str(pid),ExtractIco(file$) )
                  EndIf  
            Else
                     AddGadgetItem(#ListIcon_0, -1, "[System Idle Process]"+Chr(10)+Str(pid),ExtractIco(""))
            EndIf
       k + 1
             Wend
    EndIf  
    CloseHandle_(libPSapi)
    StatusBarText(#StatusBar, 0, "Process Loaded: "+Str(k))
    SendMessage_(GadgetID(#ListIcon_0),#WM_VSCROLL,#SB_BOTTOM,0)
    Sleep_(50)
    GetModules(pid)
    SetGadgetState(#ListIcon_0, k-1)
    popup = 1
 
  EndIf
CloseLibrary(libPSapi)
CloseLibrary(libID)
EndIf
EndProcedure
 
Procedure OpenWindow_Window_0()
  RetVal = 0
  If OpenWindow(#Window_0, #PB_Any, #PB_Any, 695, 690, "Process Viewer", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar | #PB_Window_ScreenCentered)
    SmartWindowRefresh(#Window_0 ,1)
     ListIconGadget(#ListIcon_0, 0, 0, 660, 340, "Name", 250, #PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines)
     SendMessage_(GadgetID(#ListIcon_0), #LVM_SETEXTENDEDLISTVIEWSTYLE, #LVS_EX_LABELTIP, #LVS_EX_LABELTIP)
     SetGadgetFont(#ListIcon_0, LoadFont(#Font_ListIcon_0, "Courier New", 8, #PB_Font_HighQuality))
     AddGadgetColumn(#ListIcon_0, 1, "PID", 75)
     AddGadgetColumn(#ListIcon_0, 2, "ЦП", 31)
     AddGadgetColumn(#ListIcon_0, 3, "Priority", 90)
     AddGadgetColumn(#ListIcon_0, 4, "Threads", 90)
     AddGadgetColumn(#ListIcon_0, 5, "Descriptor", 100)
     ListIconGadget(#ListIcon_1, 15, 415, 660, 300, "Module name", 120, #PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines)
     SendMessage_(GadgetID(#ListIcon_1), #LVM_SETEXTENDEDLISTVIEWSTYLE, #LVS_EX_LABELTIP, #LVS_EX_LABELTIP)
     SetGadgetFont(#ListIcon_1, LoadFont(#Font_ListIcon_1, "Courier New", 8, #PB_Font_HighQuality))
     AddGadgetColumn(#ListIcon_1, 1, "FileName", 390)
     AddGadgetColumn(#ListIcon_1, 2, "Image Base", 145)
     SplitterGadget(#Splitter_2, 10, 15, 660, 600, #ListIcon_0, #ListIcon_1, #PB_Splitter_Separator)
     SetGadgetState(#Splitter_2, 400)
     If CreateStatusBar(#StatusBar, WindowID(#Window_0))
        AddStatusBarField(110)
        AddStatusBarField(520)
        AddStatusBarField(190)
     EndIf  
  EndIf  
  If CreatePopupMenu(0)
;        MenuItem(1, "Kill Process")
;        MenuItem(2, "Open Folder")
;        MenuItem(9, "Memory map")
;        MenuBar()
       MenuItem(16, "Dump Full")
;        MenuBar()
;        MenuItem(18, "Version")
;        MenuItem(19, "FileProperties")
  EndIf
   
EndProcedure  
 
 OpenWindow_Window_0()
 EnableDebugPrivNT("SeDebugPrivilege")                   ; Даем нашему процессу крутые привелегии
 Callback = SetWindowLongPtr_(GadgetID(#ListIcon_0), #GWL_WNDPROC, @LIcallback())
 GetProcessesList()
 SetActiveGadget(#ListIcon_0)
 
IsWow64Process.PROTOIsWow64Process
 libID = OpenLibrary(#PB_Any, "kernel32.dll")
 
If libID
  IsWow64Process = GetFunction(libID, "IsWow64Process")              
EndIf
 
 Repeat
 
If(GetAsyncKeyState_(#VK_UP) & 1)
       pid = Val(GetGadgetItemText(#ListIcon_0, GetGadgetState(#ListIcon_0) , 1))
       ClearGadgetItems(#ListIcon_1)
       GetModules(pid)
ElseIf (GetAsyncKeyState_(#VK_DOWN) & 1)        
       pid = Val(GetGadgetItemText(#ListIcon_0, GetGadgetState(#ListIcon_0) , 1))
       ClearGadgetItems(#ListIcon_1)
       GetModules(pid)
EndIf
 
   Event = WaitWindowEvent()
   Select Event
     Case #PB_Event_Gadget
       EventGadget = EventGadget()     ;
       EventType = EventType()
       If EventGadget = #ListIcon_0
         If EventType = #PB_EventType_LeftClick
            pid = Val(GetGadgetItemText(#ListIcon_0,GetGadgetState(#ListIcon_0) , 1))
            ClearGadgetItems(#ListIcon_1)
            GetModules(pid)
         EndIf
       EndIf
     Case #PB_Event_Menu
       If EventGadget() = 16
         Dumpname$ = SaveFileRequester("Save process memory to..." , GetCurrentDirectory()+"Dump", "All files (*.*)|*.*" , 0)
         If Dumpname$
            If UCase(Right(Dumpname$, 4)) <> UCase(".exe")
              Dumpname$ = Dumpname$ + ".exe"
            EndIf
            pid = Val(GetGadgetItemText(#ListIcon_0, GetGadgetState(#ListIcon_0) , 1))
            hp = OpenProcess_(#PROCESS_QUERY_INFORMATION|#PROCESS_VM_READ, #True, pid)
            If hp
                  IsWow64Process(hp, @Wow64Process) ; узнаем какой процесс 32 или 64
                  If Wow64Process
                     If DumpProcess32(pid, Dumpname$)
                       MessageRequester("Dump", "Dump created  :)", #MB_OK|#MB_ICONINFORMATION)
                     Else
                       MessageRequester("Error", "Can Not create dump of process :(", #MB_OK|#MB_ICONERROR)
                     EndIf
                  Else    
                     If DumpProcess64(pid, Dumpname$)
                       MessageRequester("Dump", "Dump created  :)", #MB_OK|#MB_ICONINFORMATION)
                     Else
                       MessageRequester("Error", "Can Not create dump of process :(", #MB_OK|#MB_ICONERROR)
                     EndIf
                  EndIf    
             EndIf
          EndIf
       EndIf  
   EndSelect
 Until Event = #PB_Event_CloseWindow
 


_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс май 05, 2013 4:04 pm 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
pablov писал(а):
Вот так у меня получилось

Спасибо, полезная вещь.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: process viewer
СообщениеДобавлено: Сб июн 20, 2015 9:36 pm 
Не в сети
ассистент

Зарегистрирован: Ср май 13, 2015 3:28 pm
Сообщений: 10
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
MrF писал(а):
pablov писал(а):
Вот так у меня получилось

Спасибо, полезная вещь.


А у меня почему-то ошибка.
PureBasic
Строка 278: IsWow64Process(): неверное число параметров.
ОК

Вынь7, 36 ГГЦ, 16 ГБ ОЗУ, 8 ядер.

PureBasic 5.30.
Заставил меня по удалять все
структуры, мол у меня и без вас есть.

Это у меня персональные глюки или у всех?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Process Viewer
СообщениеДобавлено: Сб июн 20, 2015 10:01 pm 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 70 раз.
Поблагодарили: 80 раз.
Пункты репутации: 24
API IsWow64Process имеет 2 параметра. Ни больше, ни меньше. Возможно вы допустили ошибку в написании? Выложите код.

Про структуры - нормально все. В новые версии добавили просто.

Подозрение есть на стороннюю библиотеку (PBOSL, Droopy и т.п.), возможно там есть эта функция с одним параметром или вообще без них. Выложите код свой.

_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Process Viewer
СообщениеДобавлено: Вс июн 21, 2015 12:26 pm 
Не в сети
ассистент

Зарегистрирован: Ср май 13, 2015 3:28 pm
Сообщений: 10
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Никита Однороб писал(а):
API IsWow64Process имеет 2 параметра. Ни больше, ни меньше. Возможно вы допустили ошибку в написании? Выложите код.


Код такой же как был опубликован выше, только структуры убраны, в связи с матами среды.

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
 
Enumeration
        #Window_0
EndEnumeration
Enumeration
        #ListIcon_0
        #Font_ListIcon_0
        #ListIcon_1
        #Font_ListIcon_1
        #Splitter_2
        #StatusBar
EndEnumeration
 
#LIST_MODULES_32BIT = 1 ; List the 32-bit modules.
#LIST_MODULES_64BIT = 2 ; List the 64-bit modules.
#LIST_MODULES_ALL = 3           ; List all modules.
#LIST_MODULES_DEFAULT = 0
 
Prototype.i PFNENUMPROCESSMODULESeX(hProcess.l, lphModule, cb.l, lpcbNeeded.l, dwFilterFlag.l)
Prototype.i PFNGETMODULEFILENAMEEXA(hProcess.l, hModule.l, lpFilename.l, nSize.l)
Prototype       QueryFullProcessImageName(hProcess, dwFlags, lpExeName, lpdwSize)
Prototype       PFNENUMPROCESSMODULES(hProcess, *lphModule, cb, lpcbNeeded)
Prototype PROTOIsWow64Process(a, b)
 
Global popup.b, Callback
 
Procedure GetModules(processID.l)                                                                                               ; Пробуем получть список модулей х64 процесса и х32
        Protected Dim hMods.i(0), hProcess.l, cbNeeded.l, i.l, nameFile.s = Space(512)
        Protected EnumProcessModulesEx.PFNENUMPROCESSMODULESeX
        Protected GetModuleFileName.PFNGETMODULEFILENAMEEXA
        hProcess = OpenProcess_(#PROCESS_QUERY_INFORMATION|#PROCESS_VM_READ, #False, processID)
        If hProcess
                PSAPI = OpenLibrary(#PB_Any,"PSAPI.DLL")
                If PSAPI
                        EnumProcessModulesEx    = GetFunction(PSAPI, "EnumProcessModulesEx")
                        GetModuleFileName                       = GetFunction(PSAPI, "GetModuleFileNameExA")
                        If EnumProcessModulesEx(hProcess, hMods(), 0, @lpcbNeeded, #LIST_MODULES_ALL);          Пробуем получить lpcbNeeded                             
                                ReDim   hMods(lpcbNeeded/SizeOf(Integer))      
                                steps = lpcbNeeded / SizeOf(Integer)
                                If EnumProcessModulesEx(hProcess, hMods(), lpcbNeeded, @lpcbNeeded, #LIST_MODULES_ALL)
                                        For i = 0 To steps
                                                GetModuleFileName(hProcess, hMods(i), @nameFile, 512)
                                                AddGadgetItem(#ListIcon_1, -1, UCase(GetFilePart(nameFile))+#lf$+nameFile+#lf$+RSet(Hex(hMods(i), #PB_Quad), 16, "0"))
                                        Next
                                EndIf
                        EndIf
                        CloseHandle_(hProcess)
                EndIf
        EndIf
EndProcedure
 
Procedure LIcallback(hWnd, uMsg, wParam, lParam)
        result = CallWindowProc_(Callback, hWnd, uMsg, wParam, lParam)
        Select uMsg
                Case #WM_RBUTTONDOWN
                        If popup = 1 : DisplayPopupMenu(0, WindowID(#Window_0)) : EndIf
        EndSelect
        ProcedureReturn result
EndProcedure
 
Procedure.s FilePath(pid)
        Protected buffer$, bufferSize, hProcess, libID, QueryFullProcessImageName.QueryFullProcessImageName
        hProcess = OpenProcess_(#PROCESS_QUERY_INFORMATION, 0, pid)
        If hProcess
                libID = OpenLibrary(#PB_Any, "kernel32.dll")
                If libID
                        bufferSize = 1024
                        buffer$ = Space(bufferSize)
                        QueryFullProcessImageName = GetFunction(libID, "QueryFullProcessImageNameA")
                        If QueryFullProcessImageName
                                result = QueryFullProcessImageName(hProcess, 0, @buffer$, @bufferSize)
                        EndIf
                        CloseLibrary(libID)
                EndIf
                CloseHandle_(hProcess)
        EndIf
        ProcedureReturn buffer$
EndProcedure
 
Procedure DumpProcess64(pid, name.s)
        Protected *idh.IMAGE_DOS_HEADER                                
        Protected *ish.IMAGE_SECTION_HEADERS
        Protected *inh.IMAGE_NT_HEADERS                                                 ; для х64
        Protected hProcess
        Protected hSnapShot
        Protected *bufer
        Protected i
        Protected flag.b = 0
        Protected me32.MODULEENTRY32
 
        me32\dwSize = SizeOf(MODULEENTRY32)
        hSnapShot = CreateToolhelp32Snapshot_(#TH32CS_SNAPMODULE, pid)
        If hSnapShot > 0
                Module32First_(hSnapShot, me32)
                CloseHandle_(hSnapShot)
        Else
                file$ = GetGadgetItemText(#ListIcon_0, GetGadgetState(#ListIcon_0) , 0)
                If file$
                        hFile = CreateFile_(file$,#GENERIC_READ,#FILE_SHARE_READ|#FILE_SHARE_WRITE,#Null,#OPEN_EXISTING,GetFileAttributes_(file$),#Null)               
                        If hFile = #INVALID_HANDLE_VALUE
                                ProcedureReturn flag
                        Else
                                lenFile = GetFileSize_(hFile, #Null)
                                hFileMap = CreateFileMapping_(hFile, #Null, #PAGE_WRITECOPY, 0, 0, #Null)
                                MapVOF  = MapViewOfFile_(hFileMap, #FILE_MAP_READ, 0, 0, lenFile)
                                CloseHandle_(hFile)                                                                                                                                                                                            
                        EndIf
                        If MapVOF
                                *idh = MapVOF
                                *inh = MapVOF + *idh\e_lfanew
                                *ish = *inh\OptionalHeader + *inh\FileHeader\SizeOfOptionalHeader
                                me32\modBaseAddr = *inh\OptionalHeader\ImageBase
                                me32\modBaseSize = *inh\OptionalHeader\SizeOfImage
                                UnmapViewOfFile_(MapVOF)
                        EndIf
                EndIf                          
        EndIf
        hProcess = OpenProcess_(#PROCESS_QUERY_INFORMATION|#PROCESS_VM_READ, #False, pid)
        If hProcess
                *bufer = AllocateMemory(me32\modBaseSize)
                If      ReadProcessMemory_(hProcess, me32\modBaseAddr, *bufer, me32\modBaseSize, @lpNumberOfBytesRead )
                        *idh = *bufer
                        *inh = *bufer + *idh\e_lfanew
                        *ish = *inh\OptionalHeader + *inh\FileHeader\SizeOfOptionalHeader
                                ; Читаем и записываем в *bufer PE Header
                        If ReadProcessMemory_(hProcess, me32\modBaseAddr, *bufer, *inh\OptionalHeader\SizeOfHeaders, @lpNumberOfBytesRead )
                                flag = 1
                        EndIf
                        For i = 0 To *inh\FileHeader\NumberOfSections - 1
                                        ; Читаем и записываем в *bufer секции файла
                                If ReadProcessMemory_(hProcess, me32\modBaseAddr + *ish\ish[i]\VirtualAddress, *bufer + *ish\ish[i]\PointerToRawData, *ish\ish[i]\SizeOfRawData, @lpNumberOfBytesRead )
                                        flag.b = 1
                                Else
                                        flag.b = 0
                                EndIf
                        Next i
                EndIf
        EndIf
        If flag
                If CreateFile(0, name)                         
                        WriteData(0, *bufer, me32\modBaseSize)
                        CloseFile(0)
                        flag = 1
                Else
                        flag = 0
                EndIf
        EndIf
        If hProcess : CloseHandle_(hProcess) : EndIf
                If *bufer : FreeMemory(*bufer) : EndIf
        ProcedureReturn flag
EndProcedure
 
Procedure DumpProcess32(pid, name.s)
        Protected *idh.IMAGE_DOS_HEADER                                
        Protected *ish.IMAGE_SECTION_HEADERS
        Protected *inh.IMAGE_NT_HEADERS32                                                       ; для х32
        Protected hProcess
        Protected hSnapShot
        Protected *bufer
        Protected i
        Protected flag.b = 0
        Protected me32.MODULEENTRY32
 
        me32\dwSize = SizeOf(MODULEENTRY32)
        hSnapShot = CreateToolhelp32Snapshot_(#TH32CS_SNAPMODULE, pid)
        If hSnapShot > 0
                Module32First_(hSnapShot, me32)
                CloseHandle_(hSnapShot)
        Else
                file$ = GetGadgetItemText(#ListIcon_0, GetGadgetState(#ListIcon_0) , 0)
                If file$
                        hFile = CreateFile_(file$,#GENERIC_READ,#FILE_SHARE_READ|#FILE_SHARE_WRITE,#Null,#OPEN_EXISTING,GetFileAttributes_(file$),#Null)               
                        If hFile = #INVALID_HANDLE_VALUE
                                ProcedureReturn flag
                        Else
                                lenFile = GetFileSize_(hFile, #Null)
                                hFileMap = CreateFileMapping_(hFile, #Null, #PAGE_WRITECOPY, 0, 0, #Null)
                                MapVOF  = MapViewOfFile_(hFileMap, #FILE_MAP_READ, 0, 0, lenFile)
                                CloseHandle_(hFile)                                                                                                                                                                                            
                        EndIf
                        If MapVOF
                                *idh = MapVOF
                                *inh = MapVOF + *idh\e_lfanew
                                *ish = *inh\OptionalHeader + *inh\FileHeader\SizeOfOptionalHeader
                                me32\modBaseAddr = *inh\OptionalHeader\ImageBase
                                me32\modBaseSize = *inh\OptionalHeader\SizeOfImage
                                UnmapViewOfFile_(MapVOF)
                        EndIf
                EndIf                          
        EndIf
        hProcess = OpenProcess_(#PROCESS_QUERY_INFORMATION|#PROCESS_VM_READ, #False, pid)
        If hProcess
                *bufer = AllocateMemory(me32\modBaseSize)
                If      ReadProcessMemory_(hProcess, me32\modBaseAddr, *bufer, me32\modBaseSize, @lpNumberOfBytesRead )
                        *idh = *bufer
                        *inh = *bufer + *idh\e_lfanew
                        *ish = *inh\OptionalHeader + *inh\FileHeader\SizeOfOptionalHeader
                                ; Читаем и записываем в *bufer PE Header
                        If ReadProcessMemory_(hProcess, me32\modBaseAddr, *bufer, *inh\OptionalHeader\SizeOfHeaders, @lpNumberOfBytesRead )
                                flag = 1
                        EndIf
                        For i = 0 To *inh\FileHeader\NumberOfSections - 1
                                        ; Читаем и записываем в *bufer секции файла
                                If ReadProcessMemory_(hProcess, me32\modBaseAddr + *ish\ish[i]\VirtualAddress, *bufer + *ish\ish[i]\PointerToRawData, *ish\ish[i]\SizeOfRawData, @lpNumberOfBytesRead )
                                        flag.b = 1
                                Else
                                        flag.b = 0
                                EndIf
                        Next i
                EndIf
        EndIf
        If flag
                If CreateFile(0, name)                         
                        WriteData(0, *bufer, me32\modBaseSize)
                        CloseFile(0)
                        flag = 1
                Else
                        flag = 0
                EndIf
        EndIf
        If hProcess : CloseHandle_(hProcess) : EndIf
        If *bufer : FreeMemory(*bufer) : EndIf
        ProcedureReturn flag
EndProcedure
 
 
Procedure EnableDebugPrivNT(aPrivilegeName.s)
        DebugValue.LUID
        tkp.TOKEN_PRIVILEGES
                ; Retrieve a handle of the access token
        If Not OpenProcessToken_(GetCurrentProcess_(),#TOKEN_ADJUST_PRIVILEGES|#TOKEN_QUERY,@hToken)
                ProcedureReturn #False;
        EndIf
                ; Enable the SE_DEBUG_NAME privilege
        If Not LookupPrivilegeValue_("", aPrivilegeName, @DebugValue)
                CloseHandle_(hToken)
                ProcedureReturn #False;
        EndIf
        NewState.TOKEN_PRIVILEGES
        With NewState
                \PrivilegeCount=1
                \Privileges[0]\Luid\HighPart=DebugValue\HighPart
                \Privileges[0]\Luid\LowPart=DebugValue\LowPart
                \Privileges[0]\Attributes=#SE_PRIVILEGE_ENABLED
        EndWith
        AdjustTokenPrivileges_(hToken,#False,@NewState,SizeOf(TOKEN_PRIVILEGES),@PreviousState.TOKEN_PRIVILEGES,@ReturnLength)
        If hToken : CloseHandle_(hToken) : EndIf
        ProcedureReturn #True
EndProcedure
 
Procedure ExtractIco(filename.s)
        ico = ExtractIcon_(0, filename, 0)
        If      Not ico
                systemdir$=Space(255)
                GetSystemDirectory_(@systemdir$, 255)
                ico = ExtractIcon_(0,systemdir$+ "\shell32.dll",2)
        EndIf
        ProcedureReturn ico    
EndProcedure
 
Procedure GetProcessesList()
 Protected ExitCode, Wow64Process, pid, libPSapi, libID
 Protected hp, processname.s = Space(256)
 Protected RetVal.b = #True;
 Protected process.PROCESSENTRY32
 process\dwSize = SizeOf(PROCESSENTRY32)
 Protected hSnap = CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS, #Null)
 Protected IsWow64Process.PROTOIsWow64Process
 Protected GetModuleFileNameEx.PFNGETMODULEFILENAMEEXA
 libPSapi = OpenLibrary(#PB_Any, "psapi.dll")
 libID = OpenLibrary(#PB_Any, "kernel32.dll")
 
        If libPSapi And libID
                GetModuleFileNameEx = GetFunction(libPSapi,"GetModuleFileNameExA")
                IsWow64Process = GetFunction(libID, "IsWow64Process")                                          
 
                If hSnap
                        If Process32First_(hSnap, @process)
                                While Process32Next_(hSnap, @process)
                                        pid = process\th32ProcessID
                                        hp = OpenProcess_(#PROCESS_QUERY_INFORMATION|#PROCESS_VM_READ, #True, pid)
                                        If hp
                                                IsWow64Process(hp, @Wow64Process)
                                                If Wow64Process
                                                        GetModuleFileNameEx(hp, #Null, @processname, #MAX_PATH)
                                                        AddGadgetItem(#ListIcon_0, -1, processname+#lf$+Str(pid),ExtractIco(processname) )
                                                Else
                                                        file$ = FilePath(pid)
                                                        AddGadgetItem(#ListIcon_0, -1, file$+#lf$+Str(pid),ExtractIco(file$) )
                                                EndIf
                                        Else
                                                AddGadgetItem(#ListIcon_0, -1, "[System Idle Process]"+#lf$+Str(pid),ExtractIco(""))
                                        EndIf
                                        k + 1
                                Wend
                        EndIf
                        CloseHandle_(libPSapi)
                        StatusBarText(#StatusBar, 0, "Process Loaded: "+Str(k))
                        SendMessage_(GadgetID(#ListIcon_0),#WM_VSCROLL,#SB_BOTTOM,0)
                        Sleep_(50)
                        GetModules(pid)
                        SetGadgetState(#ListIcon_0, k-1)
                        popup = 1
 
                EndIf
                CloseLibrary(libPSapi)
                CloseLibrary(libID)
        EndIf
EndProcedure
 
Procedure OpenWindow_Window_0()
        RetVal = 0
        If OpenWindow(#Window_0, #PB_Any, #PB_Any, 695, 690, "Process Viewer", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar | #PB_Window_ScreenCentered)
                SmartWindowRefresh(#Window_0 ,1)
                ListIconGadget(#ListIcon_0, 0, 0, 660, 340, "Name", 250, #PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines)
                SendMessage_(GadgetID(#ListIcon_0), #LVM_SETEXTENDEDLISTVIEWSTYLE, #LVS_EX_LABELTIP, #LVS_EX_LABELTIP)
                SetGadgetFont(#ListIcon_0, LoadFont(#Font_ListIcon_0, "Courier New", 8, #PB_Font_HighQuality))
                AddGadgetColumn(#ListIcon_0, 1, "PID", 75)
                AddGadgetColumn(#ListIcon_0, 2, "ЦП", 31)
                AddGadgetColumn(#ListIcon_0, 3, "Priority", 90)
                AddGadgetColumn(#ListIcon_0, 4, "Threads", 90)
                AddGadgetColumn(#ListIcon_0, 5, "Descriptor", 100)
                ListIconGadget(#ListIcon_1, 15, 415, 660, 300, "Module name", 120, #PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines)
                SendMessage_(GadgetID(#ListIcon_1), #LVM_SETEXTENDEDLISTVIEWSTYLE, #LVS_EX_LABELTIP, #LVS_EX_LABELTIP)
                SetGadgetFont(#ListIcon_1, LoadFont(#Font_ListIcon_1, "Courier New", 8, #PB_Font_HighQuality))
                AddGadgetColumn(#ListIcon_1, 1, "FileName", 390)
                AddGadgetColumn(#ListIcon_1, 2, "Image Base", 145)
                SplitterGadget(#Splitter_2, 10, 15, 660, 600, #ListIcon_0, #ListIcon_1, #PB_Splitter_Separator)
                SetGadgetState(#Splitter_2, 400)
                If CreateStatusBar(#StatusBar, WindowID(#Window_0))
                        AddStatusBarField(110)
                        AddStatusBarField(520)
                        AddStatusBarField(190)
                EndIf
        EndIf
        If CreatePopupMenu(0)
;                               MenuItem(1, "Kill Process")
;                               MenuItem(2, "Open Folder")
;                               MenuItem(9, "Memory map")
;                               MenuBar()
                MenuItem(16, "Dump Full")
;                               MenuBar()
;                               MenuItem(18, "Version")
;                               MenuItem(19, "FileProperties")
        EndIf
EndProcedure
 
OpenWindow_Window_0()
EnableDebugPrivNT("SeDebugPrivilege")                                                                   ; Даем нашему процессу крутые привелегии
Callback = SetWindowLongPtr_(GadgetID(#ListIcon_0), #GWL_WNDPROC, @LIcallback())
GetProcessesList()
SetActiveGadget(#ListIcon_0)
 
IsWow64Process.PROTOIsWow64Process
libID = OpenLibrary(#PB_Any, "kernel32.dll")
 
If libID
        IsWow64Process = GetFunction(libID, "IsWow64Process")                                          
EndIf
 
Repeat
        If(GetAsyncKeyState_(#VK_UP) & 1)
                pid = Val(GetGadgetItemText(#ListIcon_0, GetGadgetState(#ListIcon_0) , 1))
                ClearGadgetItems(#ListIcon_1)
                GetModules(pid)
        ElseIf (GetAsyncKeyState_(#VK_DOWN) & 1)                       
                pid = Val(GetGadgetItemText(#ListIcon_0, GetGadgetState(#ListIcon_0) , 1))
                ClearGadgetItems(#ListIcon_1)
                GetModules(pid)
        EndIf
 
        Event = WaitWindowEvent()
        Select Event
                Case #PB_Event_Gadget
                        EventGadget = EventGadget()             ;
                        EventType = EventType()
                        If EventGadget = #ListIcon_0
                                If EventType = #PB_EventType_LeftClick
                                        pid = Val(GetGadgetItemText(#ListIcon_0,GetGadgetState(#ListIcon_0) , 1))
                                        ClearGadgetItems(#ListIcon_1)
                                        GetModules(pid)
                                EndIf
                        EndIf
                Case #PB_Event_Menu
                        If EventGadget() = 16
                                Dumpname$ = SaveFileRequester("Save process memory to..." , GetCurrentDirectory()+"Dump", "All files (*.*)|*.*" , 0)
                                If Dumpname$
                                        If UCase(Right(Dumpname$, 4)) <> UCase(".exe")
                                                Dumpname$ = Dumpname$ + ".exe"
                                        EndIf
                                        pid = Val(GetGadgetItemText(#ListIcon_0, GetGadgetState(#ListIcon_0) , 1))
                                        hp = OpenProcess_(#PROCESS_QUERY_INFORMATION|#PROCESS_VM_READ, #True, pid)
                                        If hp
                                                IsWow64Process(hp, @Wow64Process) ; узнаем какой процесс 32 или 64
                                                If Wow64Process
                                                        If DumpProcess32(pid, Dumpname$)
                                                                MessageRequester("Dump", "Dump created  :)", #MB_OK|#MB_ICONINFORMATION)
                                                        Else
                                                                MessageRequester("Error", "Can Not create dump of process :(", #MB_OK|#MB_ICONERROR)
                                                        EndIf
                                                Else   
                                                        If DumpProcess64(pid, Dumpname$)
                                                                MessageRequester("Dump", "Dump created  :)", #MB_OK|#MB_ICONINFORMATION)
                                                        Else
                                                                MessageRequester("Error", "Can Not create dump of process :(", #MB_OK|#MB_ICONERROR)
                                                        EndIf
                                                EndIf  
                                        EndIf
                                EndIf
                        EndIf
        EndSelect
Until Event = #PB_Event_CloseWindow
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Process Viewer
СообщениеДобавлено: Вс июн 21, 2015 5:36 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
diamass
Поменяйте все IsWow64Process, которые не в кавычках на к примеру IsWow64Process_
Или удалите библиотеку Droopy

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Process Viewer
СообщениеДобавлено: Вс июн 21, 2015 7:44 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11077
Благодарил (а): 4 раз.
Поблагодарили: 384 раз.
pablov, в коде функция вызывается через прототип.
Код:
1
2
3
4
Prototype PROTOIsWow64Process(a, b)
Protected IsWow64Process.PROTOIsWow64Process
IsWow64Process = GetFunction(libID, "IsWow64Process")
IsWow64Process(hp, @Wow64Process)


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Process Viewer
СообщениеДобавлено: Пн июн 22, 2015 8:08 am 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
Пётр писал(а):
pablov, в коде функция вызывается через прототип.

Ну и чего?. Я знаю
У человека явно подключена Droopy, где присутствует функция с таким же названием, без параметров. Изменив название ф-ии в прототипе можно избавиться от алертов, ну или друпию надо отключать

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Process Viewer
СообщениеДобавлено: Пн июн 22, 2015 10:54 am 
Не в сети
ассистент

Зарегистрирован: Ср май 13, 2015 3:28 pm
Сообщений: 10
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр писал(а):
pablov, в коде функция вызывается через прототип.

Ну и чего?. Я знаю
У человека явно подключена Droopy...[/quote]

Да, именно так. Прибил библиотеку drooby и всё заработало.
Плохо, что умельци, желая помочь новыми библиотеками, не следят за своими шаловливыми пальцами.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 129 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB