zoukankan      html  css  js  c++  java
  • 线程CONTEXT

    // classcode.cpp : Defines the entry point for the application.
    //
    
    #include "stdafx.h"
    #include<stdio.h>
    #include "resource.h"
        HANDLE hThread1;                    
        HWND hEdit ;                    
        DWORD WINAPI ThreadProc1(LPVOID lpParameter)                    
        {                    
            TCHAR szBuffer[10];                
            DWORD dwIndex = 0;                
            DWORD dwCount;                
                            
            while(dwIndex<10000)                
            {                
                GetWindowText(hEdit,szBuffer,10);            
                sscanf( szBuffer, "%d", &dwCount );            
                dwCount++;            
                memset(szBuffer,0,10);            
                sprintf(szBuffer,"%d",dwCount);    
                Sleep(1000);
                SetWindowText(hEdit,szBuffer);            
                dwIndex++;            
            }                
                            
            return 0;                
        }                                        
                            
        BOOL CALLBACK MainDlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)                    
        {                    
            BOOL bRet = FALSE;                
                            
            switch(uMsg)                
            {                
            case WM_CLOSE:                
                {            
                    EndDialog(hDlg,0);        
                    break;        
                }            
            case WM_INITDIALOG:                
                {            
                    hEdit = GetDlgItem(hDlg,IDC_EDIT1);        
                    SetWindowText(hEdit,"0");        
                            
                    break;        
                }            
            case WM_COMMAND:                
                            
                switch (LOWORD (wParam))            
                {            
                case IDC_BUTTON_T1:            
                    {        
                        hThread1 = ::CreateThread(NULL, 0, ThreadProc1,     
                            NULL, 0, NULL);
                            
                        
                        return TRUE;    
                    }        
                case IDC_BUTTON_T2:            
                    {        
                        CONTEXT context;
                        SuspendThread(hThread1);    
                        context.ContextFlags = CONTEXT_CONTROL;
                        BOOL ok = GetThreadContext(hThread1, &context);
                        int i = context.Eip;
                        context.Eip = 0x401000;
                        SetThreadContext(hThread1, &context);
                        ResumeThread(hThread1);
                        return TRUE;    
                    }
                case IDC_BUTTON3:
                        ResumeThread(hThread1);
                        return TRUE;
                    return TRUE;
                case IDC_BUTTON4:
                    ::TerminateThread(hThread1,2);                
                        ::WaitForSingleObject(hThread1,INFINITE);                
                    
    
                    return TRUE;
                }            
                break ;            
            }                
                            
            return bRet;                
        }                    
                            
        int APIENTRY WinMain(HINSTANCE hInstance,                    
                             HINSTANCE hPrevInstance,                    
                             LPSTR     lpCmdLine,                    
                             int       nCmdShow)                    
        {                    
             // TODO: Place code here.                
                            
            DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG_MAIN),NULL,MainDlgProc);                
                            
            return 0;                
        }                    


    typedef struct _CONTEXT {

    //
    // The flags values within this flag control the contents of
    // a CONTEXT record.
    //
    // If the context record is used as an input parameter, then
    // for each portion of the context record controlled by a flag
    // whose value is set, it is assumed that that portion of the
    // context record contains valid context. If the context record
    // is being used to modify a threads context, then only that
    // portion of the threads context will be modified.
    //
    // If the context record is used as an IN OUT parameter to capture
    // the context of a thread, then only those portions of the thread's
    // context corresponding to set flags will be returned.
    //
    // The context record is never used as an OUT only parameter.
    //

    DWORD ContextFlags;

    //
    // This section is specified/returned if CONTEXT_DEBUG_REGISTERS is
    // set in ContextFlags. Note that CONTEXT_DEBUG_REGISTERS is NOT
    // included in CONTEXT_FULL.
    //

    DWORD Dr0;
    DWORD Dr1;
    DWORD Dr2;
    DWORD Dr3;
    DWORD Dr6;
    DWORD Dr7;

    //
    // This section is specified/returned if the
    // ContextFlags word contians the flag CONTEXT_FLOATING_POINT.
    //

    FLOATING_SAVE_AREA FloatSave;

    //
    // This section is specified/returned if the
    // ContextFlags word contians the flag CONTEXT_SEGMENTS.
    //

    DWORD SegGs;
    DWORD SegFs;
    DWORD SegEs;
    DWORD SegDs;

    //
    // This section is specified/returned if the
    // ContextFlags word contians the flag CONTEXT_INTEGER.
    //

    DWORD Edi;
    DWORD Esi;
    DWORD Ebx;
    DWORD Edx;
    DWORD Ecx;
    DWORD Eax;

    //
    // This section is specified/returned if the
    // ContextFlags word contians the flag CONTEXT_CONTROL.
    //

    DWORD Ebp;
    DWORD Eip;
    DWORD SegCs; // MUST BE SANITIZED
    DWORD EFlags; // MUST BE SANITIZED
    DWORD Esp;
    DWORD SegSs;

    //
    // This section is specified/returned if the ContextFlags word
    // contains the flag CONTEXT_EXTENDED_REGISTERS.
    // The format and contexts are processor specific
    //

    BYTE ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];

    } CONTEXT;

  • 相关阅读:
    8. String to Integer (atoi) Java Solutin
    171. Excel Sheet Column Number Java Solutin
    217. Contains Duplicate Java Solutin
    242. Valid Anagram Java Solutin
    258. Add Digits Java Solutin
    win7刷新图标缓存
    [转]如何编程实现 2 + 2 = 5?
    [转]Java FileInputStream与FileReader的区别
    Excel中连接函数CONCATENATE()
    [转]Web基础架构:负载均衡和LVS
  • 原文地址:https://www.cnblogs.com/Lu3ky-Athena/p/13698082.html
Copyright © 2011-2022 走看看