📄 thread.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 + -