Как можно на асме получить список процессов? пробовал с помощью Process32First и Process32Next,но выходит ошибка Код (Text): main.asm(701) : error A2006: undefined symbol : Process32First main.asm(711) : error A2006: undefined symbol : Process32Next
теперь выходит это: Код (Text): main.obj : error LNK2001: unresolved external symbol _Process32First@8
способов получить список очень много, я как то так делал подобие таскменеджера, вот часть кода с выводом процессов поочередно в MessageBox Код (Text): format PE GUI 4.0 entry start include 'G:\fasm\INCLUDE\win32a.inc' include 'G:\FASM\INCLUDE\MACRO\STRUCT.INC' macro assign reg, struct { virtual at reg .#reg struct end virtual } section '.data' data readable writeable struct CLIENT_ID UniqueProcess dd ? UniqueThread dd ? ends struct SYSTEM_THREADS KernelTime db 8 dup(?) UserTime db 8 dup(?) CreateTime db 8 dup(?) WaitTime dd ? StartAddress dd ? ClientId CLIENT_ID <> Priority dd ? BasePriority dd ? ContextSwitchCount dd ? State dd ? WaitReason dd ? ends struct UNICODE_STRING Len dw ? MaximumLength dw ? Buffer dw ? ends struct VM_COUNTERS PeakVirtualSize dw ? ; SIZE_T VirtualSize dw ? ; SIZE_T PageFaultCount dw ? PeakWorkingSetSize dw ? ; SIZE_T WorkingSetSize dw ? ; SIZE_T QuotaPeakPagedPoolUsage dw ? ; SIZE_T QuotaPagedPoolUsage dw ? ; SIZE_T QuotaPeakNonPagedPoolUsage dw ? ; SIZE_T QuotaNonPagedPoolUsage dw ? ; SIZE_T PagefileUsage dw ? ; SIZE_T PeakPagefileUsage dw ? ; SIZE_T ends struct SYSTEM_PROCESS_INFORMATION NextEntryDelta dd ? ThreadCount dd ? Reserved1 dd 6 dup (?) CreateTime db 8 dup(?) UserTime db 8 dup(?) KernelTime db 8 dup(?) ProcessName UNICODE_STRING <> BasePriority dd ? ProcessId dd ? InheritedFromProcessId dd ? HandleCount dd ? Reserved2 dd 2 dup (?) VmCounters VM_COUNTERS <> ;IO_COUNTERS IoCounters; // Windows 2000 only Threads SYSTEM_THREADS <> ends razmer dd ? section '.code' code readable executable start: invoke NtQuerySystemInformation,5,0,0,razmer invoke GlobalAlloc,0h or 40h,razmer mov esi,eax assign esi,SYSTEM_PROCESS_INFORMATION invoke NtQuerySystemInformation,5,esi,razmer,0 @@: invoke MessageBoxW,0,[.esi.ProcessName+4],[.esi.ProcessName+4],0 mov eax,[esi] mov ebx,[.esi.NextEntryDelta] add esi,ebx cmp ebx,0 jnz @B ret section '.idata' import data readable writeable library kernel32,'kernel32.dll',\ user32,'user32.dll',\ gdi32,'gdi32.dll',\ ntdll,'ntdll.dll' include 'G:\FASM\INCLUDE\api\kernel32.inc' include 'G:\FASM\INCLUDE\api\user32.inc' include 'G:\FASM\\INCLUDE\api\gdi32.inc' import ntdll,\ NtQuerySystemInformation,'NtQuerySystemInformation'
777user777 Берите тогда инклуд и либу от старого масма (могу залить) или же пишите Process32FirstW Process32NextW
K10 поменяли в 11 масме все. если раньше было Код (Text): Process32First PROTO :DWORD,:DWORD Process32FirstW PROTO :DWORD,:DWORD То теперь Код (Text): Process32FirstW PROTO STDCALL :DWORD,:DWORD IFDEF __UNICODE__ Process32First equ <Process32FirstW> ENDIF
я уже с этим разобрался,просто подключил стврый kernel32.lib. чтобы не создавать новую тему,спрошу здесь: как получить список ключей в реестре? пробовал RegEnumKeyEx,но он выводит всего один ключ.
>>именно так и делаю,но выходит только первый ключ. Сталобыть не именно так делаете. Откройте наконец для себя отладчик и будет вам счастье не путаться в десяти сроках кодеса
K10 Не все, но от большинства функций прототипы лишь юникодные. + имеется специальный макрос Юникоде, при котором принудительно все вызываемые функи (вида MessageBox) будут с W.