ReactOS 0.4.15-dev-7918-g2a2556c
suspend.c
Go to the documentation of this file.
1#define UNICODE
2#define WIN32_NO_STATUS
3#include <windows.h>
4#include <stdio.h>
5#define NTOS_MODE_USER
6#include <ndk/ntndk.h>
7
8#define NDEBUG
9#include <debug.h>
10
11static volatile DWORD z;
12static volatile DWORD x=0;
13
14static NTSTATUS WINAPI
16{
17 DWORD y=0;
18
19 for(;;)
20 {
21 z++;
22 if(x>50)
23 {
24 printf("I should have been suspended for years :-)\n");
25 Sleep(100);
26 x=0;y++;
27 if(y==3) ExitProcess(0);
28 }
29 }
30}
31
32int
33main(int argc, char *argv[])
34{
38
39 context.ContextFlags=CONTEXT_CONTROL;
40
41 z=0;
43 0x1000,
45 NULL,
46 0,
47 &thread_id);
48
49 if(!thread)
50 {
51 printf("Error: could not create thread ...\n");
52 ExitProcess(0);
53 }
54
55 Sleep(1000);
56
58
59 for(;;)
60 {
61 printf("%lx ", z);
62 Sleep(100);x++;
63 if(x>100 && GetThreadContext(thread, &context))
64 {
65#if defined(_M_IX86)
66 printf("EIP: %lx\n", context.Eip);
67#elif defined(_M_AMD64)
68 printf("RIP: %p\n", context.Rip);
69#endif
70 printf("Calling resumethread ... \n");
72 }
73 }
74
75 ExitProcess(0);
76 return(0);
77}
static int argc
Definition: ServiceArgs.c:12
LONG NTSTATUS
Definition: precomp.h:26
static HANDLE thread
Definition: service.c:33
#define NULL
Definition: types.h:112
VOID WINAPI ExitProcess(IN UINT uExitCode)
Definition: proc.c:1487
DWORD WINAPI ResumeThread(IN HANDLE hThread)
Definition: thread.c:567
DWORD WINAPI SuspendThread(IN HANDLE hThread)
Definition: thread.c:642
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
Definition: thread.c:137
BOOL WINAPI GetThreadContext(IN HANDLE hThread, OUT LPCONTEXT lpContext)
Definition: thread.c:501
int main()
Definition: test.c:6
unsigned long DWORD
Definition: ntddk_ex.h:95
#define printf
Definition: freeldr.h:93
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLdouble GLdouble z
Definition: glext.h:5874
static DWORD thread_id
Definition: protocol.c:159
#define argv
Definition: mplay32.c:18
#define CONTEXT_CONTROL
Definition: nt_native.h:1369
Definition: http.c:7252
static volatile DWORD z
Definition: suspend.c:11
static NTSTATUS WINAPI thread_1(PVOID Param)
Definition: suspend.c:15
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
Definition: synch.c:790
DWORD(WINAPI * LPTHREAD_START_ROUTINE)(LPVOID)
Definition: winbase.h:729
#define WINAPI
Definition: msvc.h:6