青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-60  評論-262  文章-1  trackbacks-0
1. 根據線程ID找出其所在的模塊名

#define   WIN32_LEAN_AND_MEAN  
#define   _WIN32_WINNT   0x400  
#include   
<stdio.h>  
#include   
<tchar.h>  
#include   
<locale.h>  
#include   
<windows.h>  

#include 
<psapi.h>
#pragma comment(lib, 
"psapi.lib")

#include   
<Tlhelp32.h>  


//  
//   Thread   Information   Classes  
//  

typedef   
enum   _THREADINFOCLASS   {  
        ThreadBasicInformation,  
        ThreadTimes,  
        ThreadPriority,  
        ThreadBasePriority,  
        ThreadAffinityMask,  
        ThreadImpersonationToken,  
        ThreadDescriptorTableEntry,  
        ThreadEnableAlignmentFaultFixup,  
        ThreadEventPair_Reusable,  
        ThreadQuerySetWin32StartAddress,  
        ThreadZeroTlsCell,  
        ThreadPerformanceCount,  
        ThreadAmILastThread,  
        ThreadIdealProcessor,  
        ThreadPriorityBoost,  
        ThreadSetTlsArrayAddress,  
        ThreadIsIoPending,  
        ThreadHideFromDebugger,  
        ThreadBreakOnTermination,  
        MaxThreadInfoClass  
}   THREADINFOCLASS;  

typedef 
struct _CLIENT_ID {  
    HANDLE   UniqueProcess;  
    HANDLE   UniqueThread;  
} CLIENT_ID; 
typedef   CLIENT_ID   
*PCLIENT_ID;  

typedef   
struct   _THREAD_BASIC_INFORMATION   {   //   Information   Class   0  
    LONG        ExitStatus;  
    PVOID       TebBaseAddress;  
    CLIENT_ID   ClientId;  
    LONG        AffinityMask;  
    LONG        Priority;  
    LONG        BasePriority;  
}   THREAD_BASIC_INFORMATION,   
*PTHREAD_BASIC_INFORMATION;  

typedef LONG (__stdcall 
* PFN_ZwQueryInformationThread)(  
                                                       IN   HANDLE   ThreadHandle,  
                                                       IN   THREADINFOCLASS   ThreadInformationClass,  
                                                       OUT   PVOID   ThreadInformation,  
                                                       IN   ULONG   ThreadInformationLength,  
                                                       OUT   PULONG   ReturnLength   OPTIONAL  
                                                       );
typedef LONG (__stdcall 
* PFN_RtlNtStatusToDosError)(IN ULONG status);
typedef DWORD (__stdcall 
* PFN_RtlGetLastWin32Error)();


EXTERN_C PFN_ZwQueryInformationThread pfn_ZwQueryInformationThread 
= NULL; 
EXTERN_C PFN_RtlNtStatusToDosError  pfn_RtlNtStatusToDosError 
= NULL;
EXTERN_C PFN_RtlGetLastWin32Error  pfn_RtlGetLastWin32Error 
= NULL;

BOOL ShowThreadInfo (DWORD tid)  
{  
    THREAD_BASIC_INFORMATION tbi 
= { 0 };  
    PVOID   startaddr 
= NULL;  
    LONG    status 
= 0;  
    HANDLE  hThread
=NULL, process=NULL;  
    TCHAR   modname   [
0x100= { 0 }; 
    BOOL bResult 
= FALSE;

    
do 
    {
        hThread 
= OpenThread(THREAD_ALL_ACCESS, FALSE, tid);  
        
if (hThread == NULL) {
            SetLastError(pfn_RtlGetLastWin32Error());
            
break;
        }
        
        status   
=   pfn_ZwQueryInformationThread   (hThread,    
            ThreadQuerySetWin32StartAddress,    
            
&startaddr,    
            
sizeof   (startaddr),    
            NULL);  
        
if (status < 0) {
            SetLastError(pfn_RtlNtStatusToDosError(status));
            
break;
        };  
        
        _tprintf(TEXT(
"Thread %08x  start address is %p\n"), tid, startaddr);  
        
        status 
= pfn_ZwQueryInformationThread(hThread,    
            ThreadBasicInformation,    
            
&tbi,    
            
sizeof   (tbi),    
            NULL);  
        
        
if (status < 0)  
        {  
            SetLastError(pfn_RtlNtStatusToDosError(status));
            
break;
        };  
        
        _tprintf   (TEXT   (
"Thread %08x 's process ID is %08x\n"),    
            tid,    
            (DWORD)tbi.ClientId.UniqueProcess);  
        
        process   
=   OpenProcess   (PROCESS_ALL_ACCESS,    
            FALSE,    
            (DWORD)tbi.ClientId.UniqueProcess);  
        
        
if (process == NULL) { 
            SetLastError(pfn_RtlGetLastWin32Error()); 
            
break;
        };  
        
        GetModuleFileNameEx(process, NULL, modname, 
0x100);  
        _tprintf(TEXT(
"Thread %08x Located in Process Image %s\n"), tid, modname);
        
        GetMappedFileName(process, startaddr, modname, 
0x100);  
        _tprintf(TEXT(
"Thread %08x Located in module \"%s\"\n"), tid, modname);
        
        bResult 
= TRUE;
    } 
while (FALSE);
    
    
if (process) {
        CloseHandle(process);
    }
    
if (hThread) {
        CloseHandle(hThread);  
    }
    
    
return   TRUE;  
};  

int   main   (void)  
{  
    HINSTANCE hNTDLL 
= NULL;
    HANDLE h 
= NULL;
    THREADENTRY32 te 
= { sizeof(te) };  

    setlocale(LC_ALL, 
".ACP");  
    hNTDLL 
= GetModuleHandle(TEXT("ntdll"));  
    pfn_ZwQueryInformationThread 
= (PFN_ZwQueryInformationThread)
        GetProcAddress(hNTDLL, 
"ZwQueryInformationThread");  
    pfn_RtlNtStatusToDosError 
= (PFN_RtlNtStatusToDosError)
        GetProcAddress(hNTDLL, 
"RtlNtStatusToDosError"); 
    pfn_RtlGetLastWin32Error 
= (PFN_RtlGetLastWin32Error)
        GetProcAddress(hNTDLL, 
"RtlGetLastWin32Error");


    h   
=   CreateToolhelp32Snapshot   (TH32CS_SNAPTHREAD,   0);  
    te.dwSize   
=   sizeof   (te);  
    
if(Thread32First(h, &te))  
    {  
        
do  
        {  
            
if   (ShowThreadInfo   (te.th32ThreadID))  
            {  
            }  
            
else  
            {  
                _tprintf(TEXT(
"Can't get thread %08x information, Error code is %d\r\n"),    
                    te.th32ThreadID,   GetLastError());  
            };  
        }   
while   (Thread32Next   (h,   &te));  
    };  
    CloseHandle   (h);  
}

2. 獲取線程當前狀態, 是掛起還是終止, 沒有直接的 API. 這段代碼比較實用
#include <stdio.h>
#include 
<windows.h>
#include 
<winbase.h>
#include 
<ntsecapi.h>


#define UNICODE
#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)
#define STATUS_SUCCESS              ((NTSTATUS) 0x00000000)
#define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS) 0xC0000004)
#define SystemProcessesAndThreadsInformation    5
#define NTAPI    __stdcall

typedef 
enum _THREAD_STATE
{
    StateInitialized,
    StateReady,
    StateRunning,
    StateStandby,
    StateTerminated,
    StateWait,
    StateTransition,
    StateUnknown
}THREAD_STATE;

typedef 
enum _KWAIT_REASON
{
    Executive,
    FreePage,
    PageIn,
    PoolAllocation,
    DelayExecution,
    Suspended,
    UserRequest,
    WrExecutive,
    WrFreePage,
    WrPageIn,
    WrPoolAllocation,
    WrDelayExecution,
    WrSuspended,
    WrUserRequest,
    WrEventPair,
    WrQueue,
    WrLpcReceive,
    WrLpcReply,
    WrVirtualMemory,
    WrPageOut,
    WrRendezvous,
    Spare2,
    Spare3,
    Spare4,
    Spare5,
    Spare6,
    WrKernel,
    MaximumWaitReason
}KWAIT_REASON;

typedef NTSTATUS (WINAPI 
*PNTRAISE)(NTSTATUS,
                                    ULONG,
                                    ULONG,
                                    PULONG,
                                    UINT,
                                    PULONG);   


typedef LONG NTSTATUS;
typedef LONG    KPRIORITY;

typedef 
struct _CLIENT_ID {
    DWORD        UniqueProcess;
    DWORD        UniqueThread;
} CLIENT_ID, 
* PCLIENT_ID;


typedef 
struct _VM_COUNTERS {
    SIZE_T        PeakVirtualSize;
    SIZE_T        VirtualSize;
    ULONG        PageFaultCount;
    SIZE_T        PeakWorkingSetSize;
    SIZE_T        WorkingSetSize;
    SIZE_T        QuotaPeakPagedPoolUsage;
    SIZE_T        QuotaPagedPoolUsage;
    SIZE_T        QuotaPeakNonPagedPoolUsage;
    SIZE_T        QuotaNonPagedPoolUsage;
    SIZE_T        PagefileUsage;
    SIZE_T        PeakPagefileUsage;
} VM_COUNTERS;


typedef 
struct _SYSTEM_THREAD_INFORMATION {
    LARGE_INTEGER   KernelTime;
    LARGE_INTEGER   UserTime;
    LARGE_INTEGER   CreateTime;
    ULONG            WaitTime;
    PVOID            StartAddress;
    CLIENT_ID        ClientId;
    KPRIORITY        Priority;
    KPRIORITY        BasePriority;
    ULONG            ContextSwitchCount;
    LONG            State;
    LONG            WaitReason;
} SYSTEM_THREAD_INFORMATION, 
* PSYSTEM_THREAD_INFORMATION;



typedef 
struct _SYSTEM_PROCESS_INFORMATION {
    ULONG            NextEntryDelta;
    ULONG            ThreadCount;
    ULONG            Reserved1[
6];
    LARGE_INTEGER   CreateTime;
    LARGE_INTEGER   UserTime;
    LARGE_INTEGER   KernelTime;
    UNICODE_STRING ProcessName;
    KPRIORITY        BasePriority;
    ULONG            ProcessId;
    ULONG            InheritedFromProcessId;
    ULONG            HandleCount;
    ULONG            Reserved2[
2];
    VM_COUNTERS        VmCounters;
    IO_COUNTERS        IoCounters;
    SYSTEM_THREAD_INFORMATION Threads[
5];
} SYSTEM_PROCESS_INFORMATION, 
* PSYSTEM_PROCESS_INFORMATION;



typedef DWORD (WINAPI
* PQUERYSYSTEM)(UINT, PVOID, DWORD,PDWORD);

/************************************************************************/
/* 函數說明:
   參數:dwThreadID 代表線程ID ,這里主要是驗證線程的ID
             szProcessName,表示線程所在的進程名

返回值:
       true: 表示線程被掛起
       false: 表示線程正常。

*/
/************************************************************************/

BOOL IsThreadSuspend(DWORD dwThreadID,wchar_t 
*szProcessName)
{
    ULONG cbBuffer 
= 0x5000;
   
    BOOL bRet 
= FALSE;

    LPVOID pBuffer 
= NULL;
    NTSTATUS Status;


    DWORD b
=0;

    PQUERYSYSTEM NtQuerySystemInformation;
    PSYSTEM_PROCESS_INFORMATION pInfo ;

    NtQuerySystemInformation 
= (PQUERYSYSTEM) GetProcAddress(
        LoadLibrary( 
"ntdll.dll" ),
        
"NtQuerySystemInformation" );

    
do
    {
        pBuffer 
= malloc(cbBuffer);
        
if (pBuffer == NULL)
        {
            
break;
        }

        Status 
= NtQuerySystemInformation(
            SystemProcessesAndThreadsInformation,
            pBuffer, cbBuffer, NULL);

        
if (Status == STATUS_INFO_LENGTH_MISMATCH)
        {
            free(pBuffer);
            cbBuffer 
*= 2;
        }
        
else if (!NT_SUCCESS(Status))
        {
            free(pBuffer);
        }

    }   
while (Status == STATUS_INFO_LENGTH_MISMATCH);


    pInfo 
= (PSYSTEM_PROCESS_INFORMATION)pBuffer;

    
for (;;)
    {


        
if (pInfo->NextEntryDelta == 0)
            
break;
        
if(pInfo->ProcessName.Buffer!=NULL &&
            
!_wcsicmp(pInfo->ProcessName.Buffer,szProcessName))
        {

            
for(b=0;b<pInfo->ThreadCount ;b++)
            {
                
if(pInfo->Threads[b].ClientId.UniqueThread == dwThreadID ) //找到線程              
                {

                    
if(pInfo->Threads[b].State == StateWait && pInfo->Threads[b].WaitReason == Suspended) //線程被掛起
                    {
                        bRet 
= TRUE;
                        
break;
                    }
                }
            }
            
break;
       
        }
        pInfo 
= (PSYSTEM_PROCESS_INFORMATION)(((PUCHAR)pInfo) +    pInfo->NextEntryDelta);
    }

    free(pBuffer);
    
return bRet;
}   


/**************************************************************/
/*判斷線程是否被終止 , 如果終止返回FALSE,如果還活著返回TRUE
/*************************************************************
*/

BOOL IsThreadAlive(DWORD dwThreadID)
{
    BOOL bRet 
= FALSE;
    DWORD ExitCode 
= 0;

    HANDLE hThread 
= OpenThread(THREAD_QUERY_INFORMATION,FALSE,dwThreadID);
    
if(hThread != NULL)
    {
        
if(GetExitCodeThread(hThread,&ExitCode))
        {
            
if( ExitCode == STILL_ACTIVE)
                bRet 
= TRUE;
        }

        CloseHandle(hThread);
    }

    
return bRet;
}

int _tmain(int argc, _TCHAR* argv[])
{

   
    BOOL bRET 
=IsThreadSuspend(2320,L"EXPLORER.EXE");


    
if(bRET)
    {
        printf(
" 2320線程被掛起了!");
    }
    
return 0;
}


posted on 2009-07-22 10:29 free2000fly 閱讀(4925) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲经典在线| 亚洲在线一区二区| 一区二区欧美国产| 99re6这里只有精品| 久久精品免费看| 欧美日韩国产综合一区二区| 亚洲电影免费观看高清完整版| 一本色道久久| 亚洲欧洲精品天堂一级| 一区二区毛片| 国产精品视频在线观看| 久久xxxx| 亚洲一区二区黄| 国产一区香蕉久久| 免费影视亚洲| 欧美成年人视频| 99热在线精品观看| 国产精品久久久久久一区二区三区| 欧美在线看片| 久久国产夜色精品鲁鲁99| 久久一日本道色综合久久| 亚洲日产国产精品| 久久漫画官网| 亚洲伊人伊色伊影伊综合网| 极品裸体白嫩激情啪啪国产精品| 欧美精品一区二区蜜臀亚洲| 99成人精品| 欧美激情视频网站| 久久精品久久99精品久久| 日韩午夜激情av| 午夜视频一区在线观看| 亚洲精品乱码久久久久久黑人| 国产精品一区久久久久| 欧美日韩国产精品自在自线| 国产欧美精品| 午夜精品一区二区三区在线视 | 亚洲在线国产日韩欧美| 欧美中文字幕| 欧美日韩精品一区| 黑人一区二区三区四区五区| 国产精品美女一区二区在线观看 | 亚洲国产成人在线视频| 国产综合精品| 亚洲视频精选| 亚洲视频视频在线| 欧美亚洲尤物久久| 性欧美在线看片a免费观看| 蜜桃av一区二区在线观看| 日韩一区二区免费看| 欧美成人免费全部观看天天性色| 亚洲欧美日韩精品一区二区| 亚洲国产精品一区二区www| 国产一区在线看| 亚洲欧美日本视频在线观看| 日韩午夜av| 免费成人av在线| 久久综合中文字幕| 先锋资源久久| 9l视频自拍蝌蚪9l视频成人| 欧美一区午夜精品| 久久综合国产精品| 性色av一区二区三区| 小黄鸭视频精品导航| 久久精品国产久精国产一老狼 | 亚洲美女av网站| av成人激情| 亚洲专区免费| 男人的天堂成人在线| 日韩视频免费观看| 欧美与黑人午夜性猛交久久久| 久久久久在线| 欧美91视频| 在线中文字幕一区| 亚洲电影在线免费观看| 亚洲午夜电影网| 蜜臀a∨国产成人精品| 日韩视频一区二区三区在线播放| 亚洲欧美日韩在线不卡| 亚洲电影专区| 久久精品视频免费观看| 亚洲欧美中文另类| 国产精品入口夜色视频大尺度| 在线电影院国产精品| 久久久久久999| 欧美日韩中文字幕在线视频| 免费一区二区三区| 国产精品影片在线观看| 艳妇臀荡乳欲伦亚洲一区| 美女999久久久精品视频| 亚洲综合好骚| 午夜精品视频| 国产精品日韩在线| 亚洲伊人一本大道中文字幕| 亚洲国产精品成人综合色在线婷婷| 国产欧美三级| 亚洲影音一区| 亚洲国产毛片完整版| 毛片一区二区三区| 日韩视频精品在线| 一本色道久久88综合亚洲精品ⅰ | 国产精品久久国产精麻豆99网站| 亚洲欧美第一页| 午夜精品久久久久久久| 精品成人一区| 亚洲精品男同| 国产裸体写真av一区二区| 久久久久久有精品国产| 欧美 日韩 国产精品免费观看| 亚洲精品久久久久久久久| 亚洲狼人精品一区二区三区| 亚洲一区二区精品在线观看| 国产中文一区二区| 欧美一区二区免费观在线| 亚洲综合社区| 日韩视频不卡中文| 亚洲国产欧美一区二区三区同亚洲| 久久久国产一区二区| 国产区在线观看成人精品| 久久久亚洲综合| 亚洲欧美综合精品久久成人 | 亚洲美女色禁图| 狠狠色狠狠色综合日日tαg| 鲁大师影院一区二区三区| 久久综合给合久久狠狠色| 最新中文字幕亚洲| 亚洲精品乱码久久久久久蜜桃91| 欧美成人亚洲成人| 一区二区三区视频在线| 欧美激情区在线播放| 欧美日韩视频在线一区二区 | 亚洲精品免费网站| 欧美亚洲成人免费| 亚洲精品国精品久久99热| 久久青青草综合| 夜夜夜精品看看| 亚洲欧美综合国产精品一区| 激情综合网激情| 日韩视频中文字幕| 国产视频不卡| 国产一区观看| 亚洲黄网站黄| 欧美日韩国产在线播放| 欧美一区在线视频| 久久综合99re88久久爱| 在线亚洲一区二区| 欧美在线观看视频一区二区| 伊人一区二区三区久久精品| 久久久久久噜噜噜久久久精品 | 亚洲午夜电影网| 欧美 日韩 国产一区二区在线视频| 中国成人黄色视屏| 久久av一区| 亚洲淫性视频| 欧美理论电影在线播放| 亚洲福利视频专区| 亚洲精品美女| 尤物yw午夜国产精品视频明星| 亚洲经典自拍| 精品99一区二区| 亚洲男人天堂2024| 国产精品成人免费| 亚洲欧美日韩国产精品 | 亚洲欧洲一区二区三区在线观看| 国产精品毛片va一区二区三区| 欧美成人免费播放| 国产精品试看| 亚洲老司机av| 亚洲精品在线视频| 久久精精品视频| 欧美一区二区黄色| 久久国产成人| 国产精品一二三| 亚洲人成在线播放| 黄色欧美日韩| 欧美一区日本一区韩国一区| 国产日韩欧美一区二区三区四区 | 亚洲视频欧美在线| 99视频有精品| 欧美精品99| 久久亚洲欧美国产精品乐播| 国产精品va在线播放| 欧美一区午夜精品| 日韩视频一区| 欧美国产第二页| 国产精品久久久久婷婷| 亚洲精品国产精品国自产在线| 一区二区三区在线免费观看| 亚洲综合成人在线| 亚洲精品一区二区三区99| 国产精品亚洲综合色区韩国| 亚洲一区二区毛片| 性做久久久久久免费观看欧美| 国产精品入口福利| 久久成人久久爱| 久久久久综合一区二区三区| 美日韩精品免费观看视频| 亚洲欧美日本日韩| 久久超碰97中文字幕| 红桃视频亚洲| 中文一区二区|