Skocz do zawartości

uchwyt do procesu


Shell

Recommended Posts

Witam
Mam mały w sumie problemik bo próbuje zrobić uchwyt do procesu, niestety nie wychodzi mi na msdn pisze niby

uchwyt NtQuerySystemInformation(
SYSTEM_INFORMATION_CLASS SystemInformationClass,
PVOID SystemInformation,
ULONG SystemInformationLength,
PULONG ReturnLength
);

No i ja prubuje ale nici z związku z ty prosił bym o jakiś przykład powiedzmy "tlen.exe" będe strasznie wdzięczny.

Link do komentarza
Udostępnij na innych stronach

na jakim systemie probujesz wywyolac ta funkcje?

mam nadzieje ze wiesz o tym:

Client: Requires Windows XP or Windows 2000 Professional.

Pozatym przeczytaj sobie Remarks z https://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/ntquerysysteminformation.asp

Szczerze mowiac dokladnie opisz na czym polega problem, ew pokaz kawalek kodu. To ze cos nie dziala informuje tylko o tym ze cos zrypales o niczym wiecej.

Podaj wiecej informacji inaczej nikt nie bedzie ci w stanie pomoc

Link do komentarza
Udostępnij na innych stronach

Używam XP, ale właściewie to interesuje mnie win2000
Robie to w winapi (chodzi o zamknięcie procesu, ponieważ ten kod zamyka okno tzn. funkcja FindWindow() jest do okien) a ja chce jak już powiedziałem proces przypisać do jakiegoś uchwytu np hwnd by potem go "terminate". Stąd też jest mój post. Bardzo bym prosił o jakiś przykład bo z nich w sumie najlepiej mi się uczy. Z góry dzięki.

HWND hwd;
HANDLE hProc;
DWORD pId;

GetWindowThreadProcessId (FindWindow("notepad", 0), &pId);
hProc = OpenProcess(PROCESS_TERMINATE, FALSE, pId);
TerminateProcess(hProc, 0);

Link do komentarza
Udostępnij na innych stronach

Witam
Jeżeli nie chodzi Ci tylko o zdobycie uchwytu procesu to nie wiem dobrze jak jej użyć bo ciągle używam Win 98 ale w miarę łatwo możesz to zrobić za pomocą CreateToolhelp32Snapshot i Process32First, Process32Next możesz też przeczytać https://www.winapi.org/index.php?option=content&task=view&id=88&Itemid=33 jeżeli sobie nie poradzisz to napisz napiszę przykład (w tej chwili jestem zajęty)
Pozdro

Link do komentarza
Udostępnij na innych stronach

Cześć
No więc jest to troszkę zaplątane przynajmniej dla mnie, mam coś takiego

HANDLE WINAPI CreateToolhelp32Snapshot(DWORD TH32CS_SNAPPROCESS, DWORD th32ProcessID);

// czyli wszystkie procesy zostały podglądnięte i zapisane

// teraz tworzę tą strukture (chociaż właściwie nie wiem do czego ona jest)

typedef struct tagPROCESSENTRY32 {
DWORD dwSize;
DWORD cntUsage;
DWORD th32ProcessID;
DWORD th32DefaultHeapID;
DWORD th32ModuleID;
DWORD cntThreads;
DWORD th32ParentProcessID;
LONG pcPriClassBase;
DWORD dwFlags;
char szExeFile[MAX_PATH];
} PROCESSENTRY32;
typedef PROCESSENTRY32 * PPROCESSENTRY32;
typedef PROCESSENTRY32 * LPPROCESSENTRY32;

Ponoć teraz mam za pomocą pętli z ifkiem sprawdzać który proces nazywa się "tlen.exe" (jak mam uzyc tych procesfirst i procesnext ?)
// w sumie to jednak przydałby sie przykład taki uproszczony do minimum

Mam jeszcze drógie pytanie mianowicie czy znasz lub ktoś inny zna jakąś dobrą publikacje(książke) na temat WinApi (szczególnie wykorzytanie w internecie) Za odpowiedź będe wdzięczny

Link do komentarza
Udostępnij na innych stronach

Witam
Napisałem przykład :D To mój pierwszy program w C++ wiec proszę się nie śmiać jak coś namieszałem :P Jest to program, który zamyka Gadu-Gadu (Tlena nie mam).
Program był kompilowany pod Dev-C++ 4.9.9.0 i sprawdzony na Win 98 ale wydaje mi się że powinien też działać na Win XP. :)

#include <windows.h>
#include <tlhelp32.h>

int main(void) {
    
    HANDLE hSnapshot = NULL;
    //Uzyskaj uchwyt migawki systemu
    hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32 ProcInfo; //W tej zmiennej bedziemy otrzymywać info o procesach       
    ZeroMemory(&ProcInfo, sizeof(ProcInfo)); //Wyczyść strukturę PROCESSENTRY32
    ProcInfo.dwSize = sizeof(ProcInfo);      //Zapisz jej rozmiar
    Process32First(hSnapshot, &ProcInfo); //Pierwszy Proces
    
    DWORD GGProcID = 0; //Nowa zmienna do przzechowywania ID Procesu
    do {   
    //Szukamy Gadu-Gadu. Zwróć uwagę na  podwójny "\" w ścieżce   
    if (lstrcmpi(ProcInfo.szExeFile, "C:\\Program Files\\Gadu-Gadu\\GG.EXE") == 0) {
        GGProcID = ProcInfo.th32ProcessID; //Zapisz ID Procesu
        break; //Przerwij - po co dalej szukać jak już znaleźliśmy :)
    }
    } while (Process32Next(hSnapshot, &ProcInfo)); //Następny uruchomiony proces
    CloseHandle(hSnapshot); //Zamklnij uchwyt 

    if (!GGProcID) { //Czy ID Procesu to 0
       //Wyświetl komunikat
       MessageBox(0, "Nie znaleziono Gadu-Gadu", NULL, MB_ICONERROR); 
       return 0; //Zwróć 0
    }
    HANDLE hGGProc = NULL; //Uchwyt procesu
    //Trzeba otworzyć proces z proces aby uzyskać prawa do jego zakończenia 
    if (!(hGGProc = OpenProcess(PROCESS_TERMINATE, FALSE, GGProcID))) {
    //Wyświetl komunikat
    MessageBox(0, "Błąd OpenProcess. Nie udało się uzyskać praw do zamknięcia.", 
                NULL, MB_ICONERROR); 
    return 0;//Zwróć 0
    }  
    TerminateProcess(hGGProc, 0); //Zakończ proces
    CloseHandle(hGGProc); //Zamknij uchwyt
    //Zwróć 1
    return 1;

}

W przykładzie dla uproszczenia założyłem, że CreateToolhelp32Snapshot nie zwróci błedu i Process32First też się powiedzie (najprawdopodobniej w systemie jest uruchomiony conajmniej 1 proces). Ale jeżeli wykorzystujesz go w "normalnym" programie to oczywiście musisz liczyć się z możliwością wystąpienia błedu.
Mam nadzieję, że Ci pomoże. Gdyby coś jeszcze było niejasne to pytaj.
Pozdro

Link do komentarza
Udostępnij na innych stronach

Nie no nie zalamuj się. To mój pierwszy program w C++ ale wcześniej z WinApi korzystałem w Delphi i MASM.
Co do ksiązek o WinApi to najbardziej znana jest Charles Petzold "Programowanie Windows" niestety dotyczy ona tylko GUI. Nie znam niestety polskiej ksiązki w której były by opisane funkcje dotyczące procesów.

Link do komentarza
Udostępnij na innych stronach

Witam
O jakie procesy chodzi :/ Może o usługi systemów NT :/ , jeżeli tak to nie wiem dokładnie bo mam Win 98 ale chyba trzeba by coś pokombinować z funkcjami OpenSCManager, OpenService, SetServiceStatus ale nic więcej na ten temat nie wiem bo nie mam na czym z tym poeksperymentować.
Pozdro

Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...