⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 thread.cpp

📁 http down source code for driver development programmer
💻 CPP
字号:
// interrupt.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include <math.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <devioctl.h>
#include "..\\..\\include\\rtmdll.h"





#pragma bss_seg( "RTMBSS" )
int k_stack;
int k_stack1;
#pragma  bss_seg()

HANDLE hRTMDLL;

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
        hRTMDLL = hModule;
        return TRUE;
}




#pragma data_seg("RTMDATA")
DWORD _isr = 0;



int initLpt =0;
unsigned short dbit = 1;
#pragma data_seg()


#pragma check_stack(off) 



#pragma check_stack(on) 




int  th_end = 1;
HANDLE th;
HANDLE m_hThread;
int systhread(void *param);

ULONG WINAPI UserThread(void* pParam)
{
  char *perror = NULL;
  DWORD BytesReturned = 0;        
  int i =0;

              th = RtmCreateThread(hRTMDLL ,(THREAD_START_ROUTINE)systhread,NULL);
             Sleep(3000);

             return 0;
}


extern "C"  int WINAPI RTXEntry(int tmresol)
{
 unsigned long    m_dwThreadID;
 int error = 0;

              if(RtmInit(hRTMDLL,KERNEL_MODE) == FALSE) return 0;
           
              m_hThread =	CreateThread(
                    NULL,             
                    0,                
                    &UserThread,    // thread proc
                    NULL,             // parm
                    CREATE_SUSPENDED, 
                      &m_dwThreadID
                );


                ResumeThread(m_hThread);




              WaitForSingleObject(m_hThread, INFINITE);
              CloseHandle(m_hThread);
              RtmDeleteThread(hRTMDLL,th);

             return RtmClose(hRTMDLL);

}




#define UNICODE

#include "..\\..\\include\\xntddk.h"
#pragma check_stack(off) 

#pragma code_seg("RTMTHR")

void writetofile(PWSTR pfl,UINT addr,int nsize)
{
    IO_STATUS_BLOCK  IoStatus;
    OBJECT_ATTRIBUTES objectAttributes;
    HANDLE FileHandle = NULL;
    UNICODE_STRING fileName1;
    NTSTATUS status;

    fileName1.Buffer = NULL;
    fileName1.Length = 0;
    fileName1.MaximumLength = 256;
	DbgPrint("start");

    fileName1.Buffer = (PWSTR)ExAllocatePool(PagedPool,
                                        fileName1.MaximumLength);

	 DbgPrint("step 1");

    RtlZeroMemory(fileName1.Buffer, fileName1.MaximumLength);
    status = RtlAppendUnicodeToString(&fileName1, pfl);
    InitializeObjectAttributes (&objectAttributes,
				(PUNICODE_STRING)&fileName1,
				OBJ_CASE_INSENSITIVE,
				NULL,
				NULL );

	 DbgPrint("step 2");

    status = ZwCreateFile(&FileHandle,
			  FILE_APPEND_DATA,
			  &objectAttributes,
			  &IoStatus,
			  0, 
			  FILE_ATTRIBUTE_NORMAL,
			  FILE_SHARE_WRITE,
			  FILE_OPEN_IF,
			  FILE_SYNCHRONOUS_IO_NONALERT,
			  NULL,     
			  0 );

	if(NT_SUCCESS(status))
	{

		ZwWriteFile(FileHandle,
			  NULL,
			  NULL,
			  NULL,
			  &IoStatus,
			  (void *)addr,
			  nsize,
			  NULL,
			  NULL );

	  ZwClose(FileHandle);
    DbgPrint ("Close file");
	}
	else
	 DbgPrint("error ZwCreateFile");


    if(fileName1.Buffer)
	  ExFreePool(fileName1.Buffer);

}

#define PAUSE_1_MS            (1 * 10000)




int systhread(void *param)
{
  unsigned int _cr3 = 0;
  PVOID  pv = NULL;
  PHYSICAL_ADDRESS    pf;
  DWORD *p1 = NULL;
  unsigned n_count_task = 0;

  
     DbgPrint ("Test systhread");

	     _asm mov eax,cr3
	     _asm mov _cr3,eax
	     pf.HighPart = 0;
	     pf.LowPart = _cr3;
	     pv = MmGetVirtualForPhysical (pf);
	     writetofile(L"\\??\\C:\\tmp\\_cr3",(UINT)pv ,0x1000);

	 return 0;
}



#undef UNICODE

   


#pragma check_stack(on) 

#pragma code_seg()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -