02 2020 档案
摘要:抄的: https://blog.csdn.net/flier_lu/article/details/36426 https://www.oschina.net/question/565065_87379 《Windows驱动开发技术详解》 15.6 端口操作实现方法四 399页, 修改TSS中端口
阅读全文
摘要:抄来的 https://blog.csdn.net/sunliangyuan/article/details/99768649 现假设驱动程序已被正确安装: 1.某种PnP总线驱动发现了即插即用设备的存在: ①对于热插拔设备,则发现过程发生于插入设备的瞬间; ②如果是非热插拔设备,则发现过程发生于系
阅读全文
摘要:抄的 早期的Windows 95/98的设备驱动是VxD(Virtual Device Driver),其中x表示某一类设备。从Windows 2000开始,开发驱动程序必以WDM(Windows Driver Model)为基础的,但是,如果使用DDK来开发WDM,其开发难度之大,根本不能奢望像用
阅读全文
摘要:《Windows驱动开发技术详解 》331页, 在将IRP发送给底层驱动或其他驱动之前,可以对IRP设置一个完成例程,一旦底层驱动将IRP完成后,IRP完成例程立刻被处罚,通过设置完成例程可以方便地使程序员了解其他驱动对IRP进行的处理, 不管是调用自己的底层驱动或是调用其他驱动,都是使用内核函数I
阅读全文
摘要:手动创建IRP有以下几个步骤: 1,先得到设备的指针,一种方法是用IoGetDeviceObjectPointer内核函数得到设备对象指针,另外一种方法是用zwCreateFile内核函数先得到设备句柄,然后调用ObReferenceObjectByHandle内核方法通过设备句柄得到设备对象指针;
阅读全文
摘要:IRP被送到底层驱动程序以后,由于硬件设备的问题,IRP不能得到及时处理,甚至有可能永远不会被处理,这时候需要对IRP超时情况进行处理,一旦在规定时间内,IRP没有被处理,操作系统就会进入到IRP的处理函数种
阅读全文
摘要:DCP是一种使用更加灵活的定时器,可以对任意间隔时间进行定时。DPC定时器的内部使用了一个定时器对象KTIMER,当你设定了定时器之后,从设定开始起经过这个时间之后操作系统会将一个DPC定时器的例程插入到DPC的队列,操作系统读取DPC队列的时候定时器例程就能够被执行。这里的DPC定时器例程就相当于
阅读全文
摘要:驱动程序代码 #pragma once #define IO_CONTROL_TRANSMIT_EVENT CTL_CODE(FILE_DEVICE_UNKNOWN,0x8080,METHOD_BUFFERED,FILE_ANY_ACCESS) typedef struct _DEVICE_EXTE
阅读全文
摘要:互斥+有序 线程同步是线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应该等待,知道消息到达时才被唤醒
阅读全文
摘要:相关函数 1,CreateEvent HANDLE WINAPI CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, //表示安全控制,一般直接传入NULL,表示不能被子进程继承 BOOL bManualReset, //参数确定事件是手动置位
阅读全文
摘要:内核版的令牌 相关函数 HANDLE CreateMutexA( LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner,//FALSE的时候,互斥体创建出来就可以用 LPCSTR lpName ); 示例代码,下面是两个程序,代表两个
阅读全文
摘要:多个线程有对同一个全局变量进行写的操作时,会出现线程安全问题。 1,临界区 / 临界资源 临界资源时一次只允许一个线程使用的资源。 访问临界资源的那段代码称为临界区。 临界区实现之线程锁 如图 1,创建全局变量,一个全局令牌 CRITICAL_SECTION cs;//相当于一个令牌,让线程去拿,谁
阅读全文
摘要:线程切换的时候,要保存当前运行状态,以便后续切换回来 CONTEXT结构体保存的是一堆寄存器 两个函数 //You cannot get a valid context for a running thread. Use the SuspendThread function to suspend t
阅读全文
摘要:三个函数的使用 1,WaitForSingleObject #include <Windows.h> DWORD WINAPI MyThread(LPVOID lpParameter) { //ziji de code } int main() { HANDLE hThread; hThread =
阅读全文
摘要:1,线程是附属在进程上的执行实体,是代码的执行流程;2,一个进程可以包含多个线程,但一个进程至少要包含一个线程(主线程) #include <Windows.h> DWORD WINAPI MyThread(LPVOID lpParameter) { //ziji de code } int mai
阅读全文
摘要:IoCompleteRequest 例程表示调用者的已经完成了对指定I/O请求的所有处理操作,并且向I/O管理器返回指定的IRP报文。 //函数原型 VOID IoCompleteRequest( IN PIRP Irp, IN CCHAR PriorityBoost ); Irp 指向将要完成的I
阅读全文
摘要:一个简单的派遣函数格式 NTSTATUS DispatchFunction(PDEVICE_OBJECT pDeviceObject, PIRP pIrp) { //业务代码区 //设置返回状态 pIrp->IoStatus.Status = STATUS_SUCCESS;//getLastErro
阅读全文
摘要:IRP的全名是I/O Request Package,即输入输出请求包,它是Windows内核中的一种非常重要的数据结构。 上层应用程序与底层驱动程序通信时,应用程序会发出I/O请求,操作系统将相应的I/O请求转换成相应的IRP,不同的IRP会根据类型被分派到不同的派遣例程中进行处理。 IRP有两个
阅读全文
摘要:蓝屏,待调试 #include <ntddk.h> typedef struct _DEVICE_EXTENSION { PDEVICE_OBJECT pDevObj; UNICODE_STRING ustrDeviceName; UNICODE_STRING ustrSymbolLinkName;
阅读全文
摘要:设备对象Device_Object记录通用设备信息,另外一些信息记录在设备扩展里,设备扩展由程序员自己定义,由程序员指定内容和大小,由I/O管理器创建,并保存在非分页内存中。 驱动程序中,尽量避免使用全局函数,因为全局函数往往导致函数的不可重入性, 重入性是指,在多线程程序中,多个函数并行运行,函数
阅读全文
摘要:每个驱动程序会创建一个或多个设备对象,每个设备对象都会有一个指针指向下一个设备对象 Device结构体源码 typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _DEVICE_OBJECT { CSHORT Type; USHORT
阅读全文
摘要:每个驱动程序会有唯一的驱动对象与之对应,并且这个驱动对象是在驱动加载的时候,被内核中的对象管理程序所创建的,内核对一个驱动只加载一个实例,是由内核中的I/O管理器负责加载的,驱动程序需要在DriverEntry中初始化该驱动对象。 _DRIVER_OBJECT结构体源码 typedef struct
阅读全文
摘要:抄来的 获取网卡MAC、硬盘序列号、CPU ID、BIOS编号 本文中所有原理及思想均取自网络,有修改。其中获取硬盘序列号、获取CPU编号、获取BIOS编号的原始代码的著作权归各自作者所有。 以下代码可以取得系统特征码(网卡MAC、硬盘序列号、CPU ID、BIOS编号) BYTE szSystem
阅读全文
摘要:转载网络 黑客常用WIN API函数整理 一、进程 创建进程: CreateProcess ("C:\\windows\\notepad.exe",0,0,0,0,0,0,0,&si,&pi); WinExec("notepad",SW_SHOW); ShellExecute(0,"open","n
阅读全文
摘要:设备读写方式共三种: 方式 Flag 特点 缓冲区方式读写 DO_BUFFERED_IO I/O管理器先创建一个与用户模式数据缓冲区大小相等的系统缓冲区。而你的驱动程序将使用这个系统缓冲区工作。I/O管理器负责在系统缓冲区和用户模式缓冲区之间复制数据。 直接方式读写 DO_DIRECT_IO I/O
阅读全文
摘要:用户部分代码: int main() { HANDLE hDevice = CreateFile(L"\\\\.\\MyTest", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
阅读全文
摘要:搞内存常用函数 C语言 内核 malloc ExAllocatePool memset RtlFillMemory memcpy RtlMoveMemory free ExFreePool
阅读全文
摘要:函数语法 BOOL DeviceIoControl( HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LP
阅读全文
摘要:NTSTATUS functionName(PDEVICE_OBJECT pDeviceObject, PIRP pIrp) { //业务代码区 //设置返回状态 pIrp->IoStatus.Status = STATUS_SUCCESS;//getLastError()得到的值 pIrp->Io
阅读全文
摘要:windows下的设备是以"\Device\[设备名]”形式命名的。 例如磁盘分区的C盘,D盘的设备名称就是 "\Device\HarddiskVolume2” "\Device\HarddiskVolume3”。 也可以不指定设备名称,那么I/O管理器会自动分配一个数字作为设备的名称。例如 "\D
阅读全文
摘要:BCDEDIT -SET LOADOPTIONS DISABLE_INTEGRITY_CHECKSBCDEDIT -SET TESTSIGNING ON
阅读全文
摘要:git rm --cached filename/-r directory git commit "xxxx" git push
阅读全文
摘要:1,git远程新建仓库demo 2,git本地初始化仓库demo 3,git本地添加远程仓库 git remote add <name> <url> 4,git把远程仓库pull下来 第四个步骤会出问题,fatal: refusing to merge unrelated histories 其实这
阅读全文
摘要:三个模块 1,game.exe,三个方法,控制台输入指令('A','B','R')分别控制三个方法的调用; 2,WGDll.dll,要注入到game进程中的dll文件; 3,myconsole.exe,用来注入dll文件的程序; 先开启game进程,然后用myconsole把dll注入到game,d
阅读全文
摘要:server部分 1,Initialize Winsock. 2,Create a socket. 3,Bind the socket. 4,Listen on the socket for a client. 5,Accept a connection from a client. 6,Recei
阅读全文
摘要:导出表: typedef struct _IMAGE_EXPORT_DIRECTORY { DWORD Characteristics; // 未使用,总为0 DWORD TimeDateStamp; // 文件创建时间戳 WORD MajorVersion; // 未使用,总为0 WORD Min
阅读全文
摘要:IMAGE_OPTIONAL_HEADER结构体最后一个成员是数组结构,大小为16,每个元素都是一个IMAGE_DATA_DIRECTORY结构体 typedef struct _IMAGE_DATA_DIRECTORY { DWORD VirtualAddress; /**指向某个数据的相对虚拟地
阅读全文
浙公网安备 33010602011771号