windows系统调用 线程 启动与挂起

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

#include "iostream"

#include "windows.h"

using
namespace std;

class
CWorkerThread{

public:

    CWorkerThread(LPCTSTR m_szName):m_szName(m_szName),m_hThread(INVALID_HANDLE_VALUE){

        m_hThread=CreateThread(

            NULL,

            0,

            ThreadProc,

            reinterpret_cast<LPVOID>(this),

            0,

            NULL

            );

    }

    virtual
~CWorkerThread(){CloseHandle(m_hThread);}

    virtual
void WaitForCompletion(){

        WaitForSingleObject(m_hThread,INFINITE);

    }

    virtual
void SetPriority(int
nPriority){

        SetThreadPriority(m_hThread,nPriority);

    }

    virtual
void Suspend(){

        SuspendThread(m_hThread);

    }

    virtual
void Resume(){

        ResumeThread(m_hThread);

    }

protected:

    static
DWORD WINAPI ThreadProc(LPVOID lpParam){

        CWorkerThread *pThis=

            reinterpret_cast<CWorkerThread*>(lpParam);

        pThis->DoStuff();

        return
(0);

    }

    virtual
void DoStuff(){

        for(int
n=0;n<10;n++){

            cout<<"Thread"<<m_szName<<"ID:"<<GetCurrentThreadId()<<",count"<<n<<endl;

        }

    }

protected:

    HANDLE m_hThread;

    LPCTSTR m_szName;

};

void
main(){

    CWorkerThread wtA("A");

    CWorkerThread wtB("B");

    wtA.SetPriority(THREAD_PRIORITY_LOWEST);

    wtB.Suspend();

    wtA.WaitForCompletion();

    wtB.Resume();

    wtB.WaitForCompletion();

    cout<<"Both threads complete."<<endl;

    getchar();

}

  

时间: 2024-08-05 02:53:59

windows系统调用 线程 启动与挂起的相关文章

windows系统调用 线程创建

1 #include "windows.h" 2 #include "iostream" 3 using namespace std; 4 5 class CWorkerThread{ 6 public: 7 CWorkerThread(LPCTSTR szName): 8 m_szName(szName),m_hThread(INVALID_HANDLE_VALUE){ 9 m_hThread=CreateThread( 10 NULL, 11 0, 12 Thr

WINDOWS INSTALLER无法启动解决方法

WINDOWS INSTALLER无法启动解决方法 2011-04-13 10:18:32 标签:操作系统 windows 休闲 职场 第一步:使用记事本编写installer.reg文件,内容如下: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSIServer] “ImagePath”=- “ImagePath”=hex(2):25,00,53,00,79

[转载]Windows系统调用架构分析—也谈KiFastCallEntry函数地址的获取

原文地址:点击打开链接 为什么要写这篇文章 1.      因为最近在学习<软件调试>这本书,看到书中的某个调试历程中讲了Windows的系统调用的实现机制,其中讲到了从Ring3跳转到Ring0之后直接进入了KiFastCallEntry这个函数. 2.      碰巧前天又在网上看到了一篇老文章介绍xxx安全卫士对Windows系统调用的Hook,主要就是Hook到这个函数 3.      刚刚做完毕业设计,对使用中断来实现系统调用的方式记忆犹新. 以上原因导致我最近眼前总是出现系统调用这

Windows系统调用中的现场保存

Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html Windows系统调用中的现场保存 我们之前介绍过三环进零环的步骤,通过中断或者快速调用来实现. 但是我们是否考虑过CPU从三环进入零环时,其三环的寄存器该如何保存. 这一篇文件就来介绍其系统调用中的(三环)现场保存的问题. 一.几个重要的结构体介绍 1. _Ktrap_frame 该结构体简单来说用于三环的寄存器保存,存储于零环,由操作系统维护 详细信息可以查看

Windows系统调用中的系统服务表

Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html Windows系统调用中的系统服务表 如果这部分不理解,可以查看 Windows内核分析索引目录依次阅读. 我们在之前讲过系统调用过程中,给予eax一个编号,操作系统通过这个编号来执行某个内核函数. 这个函数是通过操作系统的系统服务表来查找的. 现在,我们来探究一下nt!KiFastCallEntry的反汇编代码,看看其如何查看系统服务表找到要执行的函数的. 一.

C#对Windows服务组的启动与停止

Windows服务大家都不陌生,Windows服务组的概念,貌似MS并没有这个说法. 作为一名软件开发者,我们的机器上安装有各种开发工具,伴随着各种相关服务. Visual Studio可以不打开,SqlServer Management Studio可以不打开,但是SqlServer服务却默认开启了.下班后,我的计算机想用于生活.娱乐,不需要数据库服务这些东西,尤其是在安装了Oracle数据库后,我感觉机器吃力的很. 每次开机后去依次关闭服务,或者设置手动开启模式,每次工作使用时依次去开启服务

windows系统调用 进程终止

1 #include "windows.h" 2 #include "iostream" 3 #include "stdio.h" 4 using namespace std; 5 6 static LPCTSTR q_szMutexName="w2kdg.ProcTerm.mutex.Suicide"; 7 8 HANDLE StartClone(){ 9 TCHAR szFilename[MAX_PATH]; 10 Get

同一台Windows机器中启动多个Memcached服务

同一台Windows机器中启动多个Memcached服务 这就需要在一台机器上启动多个Memcached服务了. 假设Memcached在如下目录:C:\memcached\memcached.exe 在CMD中执行如下命令即可再安装一个Memcached服务(记得换个端口号啊!): sc create "Memcached Server1" start= auto binPath= "F:\memcached\memcached.exe -d runservice -m 3

windows系统调用 进程快照

1 #include "windows.h" 2 #include "tlhelp32.h" 3 #include "iostream" 4 using namespace std; 5 6 #pragma comment(lib,"kernel32.lib") 7 8 DWORD GetKernelModePercentage(const FILETIME& ftKernel, 9 const FILETIME&am