- 博客(27)
- 资源 (2)
- 问答 (1)
- 收藏
- 关注
原创 将应用程序的函数指针传递给驱动程序来调用
EXE部分#include #include #include #include "Ioctl.h"void Out_8(PUCHAR Port,UCHAR Value){ __asm { mov edx,Port mov al,Value out dx,al nop nop } return;}void KernelModeFunction(vo
2015-08-09 18:22:45 500
原创 分层驱动将IRP分解成多个IRP
EXE部分#include #include #include #include "Ioctl.h"int main (void){ char linkname[]="\\\\.\\HelloDDKB"; HANDLE hDevice = CreateFileA(linkname, GENERIC_READ | GENERIC_WRITE, 0, NULL,
2015-08-09 13:33:32 437
原创 分层驱动完成历程
EXE部分#include #include #include #include "Ioctl.h"int main (void){ char linkname[]="\\\\.\\HelloDDKB"; HANDLE hDevice = CreateFileA(linkname, GENERIC_READ | GENERIC_WRITE, 0, NULL,
2015-08-08 19:03:51 599
原创 分层驱动向下转发IRP
EXE部分#include #include #include #include "Ioctl.h"int main (void){ char linkname[]="\\\\.\\HelloDDKB"; HANDLE hDevice = CreateFileA(linkname, GENERIC_READ | GENERIC_WRITE, 0, NULL,
2015-08-08 16:55:15 534
原创 用IoAllocateIrp创建IRP
EXE部分#include #include #include #include "Ioctl.h"int main (void){ char linkname[]="\\\\.\\HelloDDKB"; HANDLE hDevice = CreateFileA(linkname, GENERIC_READ | GENERIC_WRITE, 0, NULL,
2015-08-07 15:41:22 2117
原创 通过设备指针调用其他驱动程序(异步方式)
EXE部分#include #include #include #include "Ioctl.h"int main (void){ char linkname[]="\\\\.\\HelloDDKB"; HANDLE hDevice = CreateFileA(linkname, GENERIC_READ | GENERIC_WRITE, 0, NULL,
2015-08-07 14:57:04 391
原创 通过设备指针调用其他驱动程序(同步方式)
EXE部分#include #include #include #include "Ioctl.h"int main (void){ char linkname[]="\\\\.\\HelloDDKB"; HANDLE hDevice = CreateFileA(linkname, GENERIC_READ | GENERIC_WRITE, 0, NULL,
2015-08-07 14:42:57 1013
原创 符号链接获得设备名
NTSTATUS status=STATUS_SUCCESS; UNICODE_STRING DeviceSymbolcLinkName; RtlInitUnicodeString(&DeviceSymbolcLinkName,L"\\??\\HelloDDKA"); //初始化objectAttributes; OBJECT_ATTRIBUTES objectAttributes;
2015-08-07 14:01:02 1006
原创 驱动中以文件句柄形式调用其他驱动程序(异步调用二)
EXE部分#include #include #include #include "Ioctl.h"int main (void){ char linkname[]="\\\\.\\HelloDDKB"; HANDLE hDevice = CreateFileA(linkname, GENERIC_READ | GENERIC_WRITE, 0, NULL,
2015-08-07 11:38:48 562
原创 驱动中以文件句柄形式调用其他驱动程序(异步调用一)
EXE部分#include #include #include #include "Ioctl.h"int main (void){ char linkname[]="\\\\.\\HelloDDKB"; HANDLE hDevice = CreateFileA(linkname, GENERIC_READ | GENERIC_WRITE, 0, NULL,
2015-08-07 10:51:20 778
原创 驱动中以文件句柄形式调用其他驱动程序(同步调用)
EXE部分#include #include #include #include "Ioctl.h"int main (void){ char linkname[]="\\\\.\\HelloDDKB"; HANDLE hDevice = CreateFileA(linkname, GENERIC_READ | GENERIC_WRITE, 0, NULL,
2015-08-06 20:19:51 526
原创 IRP的超时处理
EXE部分#include #include #include #include "Ioctl.h"int main (void){ char linkname[]="\\\\.\\HelloDDK"; HANDLE hDevice = CreateFileA(linkname, GENERIC_READ | GENERIC_WRITE, 0, NULL,
2015-08-06 16:04:17 642
原创 时间相关
VOID Test(void){ //得到当前系统时间 LARGE_INTEGER current_system_time={0}; KeQuerySystemTime(¤t_system_time); //从系统事件转换称当地时区时间 LARGE_INTEGER current_local_time={0}; ExSystemTimeToLocalTime(¤t_system_
2015-08-06 11:12:37 380
原创 驱动中四种等待的用法
EXE部分#include #include #include #include "Ioctl.h"int main (void){ char linkname[]="\\\\.\\HelloDDK"; HANDLE hDevice = CreateFileA(linkname, GENERIC_READ | GENERIC_WRITE, 0, NULL,
2015-08-06 10:44:43 1422
原创 DPC定时器
EXE部分#include #include #include #include "Ioctl.h"int main (void){ char linkname[]="\\\\.\\HelloDDK"; HANDLE hDevice = CreateFileA(linkname, GENERIC_READ | GENERIC_WRITE, 0, NULL,
2015-08-06 09:39:44 618
原创 I/O定时器
EXE#include #include #include #include "Ioctl.h"int main (void){ char linkname[]="\\\\.\\HelloDDK"; HANDLE hDevice = CreateFileA(linkname, GENERIC_READ | GENERIC_WRITE, 0, NULL, OP
2015-08-05 15:18:10 536
原创 自定义StartIO例程
EXE部分#include #include #include #include "Ioctl.h"DWORD ThreadProc( LPVOID lpParameter){ printf("线程执行\n"); OVERLAPPED overlap={0}; overlap.hEvent=CreateEvent(NULL,FALSE,FALSE,NULL); UCHAR
2015-08-04 19:02:09 442
原创 StartIO例程
StartIO例程能够保证各个并行的IRP顺序执行,即串行化并行执行与串行执行在很多情况时,对设备的操作必须是串行执行,而不能并行执行。例如,对串口的操作,假如有N个线程同时操作串口设备时,必须将这些操作排队,然后一一进行处理。如果不做串行化处理,当一个操作没有完毕时,新的操作又开始,这必然会导致操作的混乱。因此,驱动程序有必要将并行的请求变成串行的请求,这需要用到队列。可以想象,如果不
2015-08-04 16:51:56 580
原创 IRP的异步完成
EXE部分#include #include #include #include "Ioctl.h"int main (void){ char linkname[]="\\\\.\\HelloDDK"; HANDLE hDevice = CreateFileA(linkname, GENERIC_READ | GENERIC_WRITE, 0, NULL,
2015-08-04 10:55:06 535
原创 驱动中IRP_MJ_READ异步
EXE部分#include #include #include #include "Ioctl.h"int main (void){ char linkname[]="\\\\.\\HelloDDK"; HANDLE hDevice = CreateFileA(linkname, GENERIC_READ | GENERIC_WRITE, 0, NULL,
2015-08-03 19:04:52 2633
原创 ReadFileEx异步读设备
#include #include VOID CALLBACK FileIOCompletionRoutine(DWORD dwErrorCode,DWORD dwNumberOfBytesTransfered,LPOVERLAPPED lpOverlapped){ printf("对于此次擦在返回的状态%d\n",dwErrorCode); printf("告诉已经操作了多少字节,
2015-08-03 19:03:35 809
原创 ReadFile异步读设备
#include #include int main (void){ HANDLE hDevice=CreateFile(TEXT("C:\\1.txt"), GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, ///此处设置F
2015-08-03 19:01:45 2999
原创 内核模式下互斥体
int Number=100;VOID ThreadProc1( IN PVOID lpParameter){ PKMUTEX pkMutex=(PKMUTEX)lpParameter; while (Number>0) { KeWaitForSingleObject(pkMutex,Executive,KernelMode,FALSE,NULL); KeStallExecut
2015-08-02 16:46:16 763
原创 内核模式下 信号灯
VOID MyProcessThread(IN PVOID pConText){#if DBG _asm int 3#endif //获取信号灯 PKSEMAPHORE pkSemaphore=(PKSEMAPHORE)pConText; //释放给定信号对象 KeReleaseSemaphore(pkSemaphore,IO_NO_INCREMENT,1,FALSE); /
2015-08-02 15:27:43 520
原创 驱动程序和应用程序交换事件对象
EXE部分代码#ifndef IOCTLS_H#define IOCTLS_H#ifndef CTL_CODE#pragma message("CTL_CODE undefined. Include winioctl.h or ntddk.h")#endif//缓冲内存模式IOCTL#define IOCTL_TEST1 CTL_CODE(FILE_DEVICE_UN
2015-08-02 14:29:04 512
原创 在内核下使用事件对象KeInitializeEvent
VOID MyProcessThread( IN PVOID StartContext){#if DBG _asm int 3#endif PKEVENT pEvent=(PKEVENT)StartContext; DbgPrint("11111111111111!\n"); //设置事件 KeSetEvent(pEvent,IO_NO_INCREMENT,FALSE);
2015-08-02 14:24:58 4832 1
原创 PsCreateSystemThread
HANDLE hSystemThread,hMyThread;PsCreateSystemThread(&hSystemThread,NULL,NULL,NULL,NULL,ThreadSystemStart,NULL);PsCreateSystemThread(&hMyThread,NULL,NULL,NtCurrentProcess(),NULL,ThreadUserStart,NULL)
2015-08-01 16:10:09 1061
函数多线安全性问题,大家帮我看看
2015-06-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人