WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  нужен handle thread' а

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   нужен handle thread' а
Pavel7351 опубликован 03-04-2001 21:25 MSK   Click Here to See the Profile for Pavel7351   Click Here to Email Pavel7351  
есть handle процесса, нужно просканировать все потоки и получить handl'ы, но без функции GetCurrentThread(), т.к. он не работает с функцией GetKernelObjectSecurity()
FtoR опубликован 04-04-2001 00:35 MSK     Click Here to See the Profile for FtoR  Click Here to Email FtoR     
2 Pavel7351.

Взгляни, это должно помочь. А еще - ВНИМАТЕЛЬНО ПОЧИТАЙ SDK, там обо всем хорошо написано.

The following function takes a snapshot of the threads currently executing in the system and walks through the list recorded in the snapshot.

// Returns TRUE if the threads were successfully enumerated
// and listed or FALSE if the threads could not be enumerated
// or listed.
// hListView - handle of the listview that lists thread information
// dwOwnerPID - identifier of the process whose threads are to
// be listed
BOOL RefreshThreadList (HWND hListView, DWORD dwOwnerPID)
{
HANDLE hThreadSnap = NULL;
BOOL bRet = FALSE;
THREADENTRY32 te32 = {0};


// Take a snapshot of all threads currently in the system.
hThreadSnap = pCreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if (hThreadSnap == (HANDLE)-1)
return (FALSE);

// Clear the current contents of the thread list view
// (which are now old).
ListView_DeleteAllItems(g_hwndThread);

// Fill in the size of the structure before using it.
te32.dwSize = sizeof(THREADENTRY32);

// Walk the thread snapshot to find all the threads of the process.

// If the thread belongs to the process, add its information
// to the display list.
if (pThread32First(hThreadSnap, &te32)) {
do {
if (te32.th32OwnerProcessID == dwOwnerPID) {
TINFO ti;

ti.tid = te32.th32ThreadID;
ti.pidOwner = te32.th32OwnerProcessID;
ti.tpDeltaPri = te32.tpDeltaPri;
ti.tpBasePri = te32.tpBasePri;

AddThreadItem(hListView, ti);

}
}
while (pThread32Next(hThreadSnap, &te32));
bRet = TRUE;
}
else
bRet = FALSE; // could not walk the list of threads

// Do not forget to clean up the snapshot object.
CloseHandle (hThreadSnap);

return (bRet);
}


Описалово на THREADENTRY32.

Describes an entry from a list that enumerates the threads executing in the system when a snapshot was taken.

typedef struct tagTHREADENTRY32{
DWORD dwSize;
DWORD cntUsage;
DWORD th32ThreadID;
DWORD th32OwnerProcessID;
LONG tpBasePri;
LONG tpDeltaPri;
DWORD dwFlags;
} THREADENTRY32;
typedef THREADENTRY32 * PTHREADENTRY32;
typedef THREADENTRY32 * LPTHREADENTRY32;

Members

dwSize

Specifies the length, in bytes, of the structure. Before calling the Thread32First function, set this member to
sizeof(THREADENTRY32).

cntUsage

Number of references to the thread. A thread exists as long as its usage count is nonzero. As soon as its usage count becomes zero, a thread terminates.

th32ThreadID

Identifier of the thread. This identifier is compatible with the thread identifier returned by the CreateProcess function.

th32OwnerProcessID

Identifier of the process that created the thread. The contents of this member can be used by Win32 API elements.

tpBasePri

Initial priority level assigned to a thread. These values are defined:

THREAD_PRIORITY_IDLE

Indicates a base priority level of 1 for IDLE_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, or HIGH_PRIORITY_CLASS processes, and a base priority level of 16 for REALTIME_PRIORITY_CLASS processes.

THREAD_PRIORITY_LOWEST

Indicates 2 points below normal priority for the priority class.

THREAD_PRIORITY_BELOW_NORMAL

Indicates 1 point below normal priority for the priority class.

THREAD_PRIORITY_NORMAL

Indicates normal priority for the priority class.

THREAD_PRIORITY_ABOVE_NORMAL

Indicates 1 point above normal priority for the priority class.

THREAD_PRIORITY_HIGHEST

Indicates 2 points above normal priority for the priority class.

THREAD_PRIORITY_TIME_CRITICAL

Indicates a base priority level of 15 for IDLE_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, or HIGH_PRIORITY_CLASS processes, and a base priority level of 31 for REALTIME_PRIORITY_CLASS processes.

tpDeltaPri

Change in the priority level of a thread. This value is a signed delta from the base priority level assigned to the thread.

dwFlags

Reserved; do not use.

aldep опубликован 05-04-2001 23:34 MSK     Click Here to See the Profile for aldep  Click Here to Email aldep     
Примечание, это работает только под 9х и 2000.
Под NT это не работает.
Под NT все гораздо сложнее в примере, находящемся в SDK -
Samples\VC98\sdk\sdktools\winnt\pviewer
написано как сделать это.
FtoR опубликован 06-04-2001 09:40 MSK     Click Here to See the Profile for FtoR  Click Here to Email FtoR     
Да, aldep, для NT, очень полезно, т.к. я так и не понял, почему эти функции под NT возвращают какие-то ошибки с памятью...

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.