X64 Sistemler İçin Görev Yöneticisinden İşlem Gizleme Sorunu - Cpp
-
/* * File: main.cpp * Author: Oguzhan * * Created on 7 Eylül 2011 Pazar, 20:52 */ #include <windows.h> #include <iostream> #include <fstream> #include <Commctrl.h> using namespace std; /* * */ char* target = "taskmgr.exe"; BOOL CALLBACK EnumChildProcedure(HWND hWnd, LPARAM lParam) { DWORD pid; GetWindowThreadProcessId(hWnd, &pid); char ClassName[256]; GetClassName(hWnd, ClassName, 256); if (string(ClassName) == "SysListView32") { HANDLE hTskmgr = OpenProcess(PROCESS_ALL_ACCESS, 0, pid); byte* pData = (byte*) VirtualAllocEx(hTskmgr, 0, 1024, MEM_COMMIT, PAGE_READWRITE); byte* plData = (byte*) malloc(1024); LVITEM lvItem = {0}; lvItem.iSubItem = 0; lvItem.mask = LVIF_TEXT; lvItem.cchTextMax = 256; lvItem.pszText = (LPTSTR) (pData + sizeof ( LVITEM)); int len = SendMessage(hWnd, LVM_GETITEMCOUNT, 0, 0); for (int i = 0; i < len; i++) { lvItem.iItem = i; WriteProcessMemory(hTskmgr, (LPVOID) pData, &lvItem, sizeof (LVITEM), 0); SendMessage(hWnd, LVM_GETITEM, 0, (LPARAM) pData); ReadProcessMemory(hTskmgr, (LPVOID) pData, plData, 1024, NULL);//x64 makinada burda data gelmiyor, lvItem boş dönüyor cout << string((char*) (plData + sizeof (LVITEM))) << endl; if (string((char*) (plData + sizeof (LVITEM))) == string(target)) SendMessage(hWnd, LVM_DELETEITEM, i, 0); } VirtualFreeEx(hTskmgr, (LPVOID) pData, 0, MEM_RELEASE); CloseHandle(hTskmgr); } return true; } int main(int argc, char** argv) { HWND hwnd = FindWindowW(L"#32770", 0); EnumChildWindows(hwnd, EnumChildProcedure,0); return 0; }arkadaşlar yukarıda verdiğim kod prototipi windows görev yönetiisinden işlem gizlemeye yarıyor, fakat şöyle bir problemim var, bu kod x86 ilşletim sistemi kurlu laptopumda çalşıyor ama x64 işletim sistemi kurulu bilgisarımda çalışmıyor, yardımlarınızı bekliyorum
-
up,
cpp den anlayan yok mu koca forumda :D, yoksa ben mi açıklayamadım sorunumu? -
Müride yardım UP
-
merak var:up
-
Yollayan : Tugberk
Alıcı : nessaj
Tarih 14 Eylül 2011 Saat: 08:47
Konu : x64 sorunu
Mesaj : kuzen söyledi ama bu aralar biraz meşgulüm ancak cevaplayabildim. Bu çok sık karşılaşılan bir sorun, sebebi şu, 64 bit olarak derlenmiş programlar 64 bit pointer ve adresler kullanırlar. Bu yüzden ReadProcessMemory gibi fonksiyonları kullanırken bunu göz önünde bulundurmak zorundasın. 32 bit bir program ile 64 bit bir process den ReadProcessMemory ile okuma yapamazsın. programı da 64 bit yazmalısın.
nasıl farkedemedim böyle bi problemi, ve nasıl kimse farkedemedi : ), çok teşekkürler arkadaşa cevabı için
Toplam Hit: 1858 Toplam Mesaj: 5
