亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hook3.pas

?? Delphi Driver Development Kit
?? PAS
字號:
//
// hook3 is driver with sample device extension and communication with user mode 
// application using DeviceIoControl, it maintain a list of rules for pids 
// in device extension but does nothing with the list yet
//
unit hook3;

interface

//
// the most important unit is DDDK which source is in inc directory
// it contains everything we need to work with kernel functions
//
uses DDDK;

//
// this is the must, when one say you can name your driver entry with your name 
// in DDK, you have to leave _DriverEntry name of entry in DDDK unless you know
// what you are dealing with
//
function _DriverEntry(ADriverObject:PDriverObject;ARegistryPath:PUnicodeString):NTSTATUS; stdcall;

function Hook3Create(ADeviceObject:PDeviceObject;AIrp:PIrp):NTSTATUS; stdcall;
function Hook3Close(ADeviceObject:PDeviceObject;AIrp:PIrp):NTSTATUS; stdcall;
function Hook3DeviceControl(ADeviceObject:PDeviceObject;AIrp:PIrp):NTSTATUS; stdcall;
procedure Hook3Unload(ADriverObject:PDriverObject); stdcall;


implementation

uses Hooking,DrvComm,Func;

var
// dos device name is global variable because we use it in unload too,
// we can always make another RtlInitUnicodeString if we don't like global vars
 DosDevName:TUnicodeString;


//
// create function is called everytime CreateFile is called on our device 
//
function Hook3Create(ADeviceObject:PDeviceObject;AIrp:PIrp):NTSTATUS; stdcall;
begin
 DbgMsg('hook3.pas: Hook3Create(ADeviceObject:0x%.8X,AIrp:0x%.8X)',[ADeviceObject,AIrp]);

 Result:=STATUS_SUCCESS;
 AIrp^.IoStatus.Status:=Result;
 IoCompleteRequest(AIrp,IO_NO_INCREMENT);

 DbgMsg('hook3.pas: Hook3Create(-):0x%.8X)',[Result]);
end;


//
// close function is called everytime CloseHandle is called on our device
// close is associated with IRP_MJ_CLOSE and it is NOT executed in the context 
// of the CloseHandle caller, if we want to make some cleanup in that context 
// we rather associate cleanup function with IRP_MJ_CLEANUP
//

function Hook3Close(ADeviceObject:PDeviceObject;AIrp:PIrp):NTSTATUS; stdcall;
begin
 DbgMsg('hook3.pas: Hook3Close(ADeviceObject:0x%.8X,AIrp:0x%.8X)',[ADeviceObject,AIrp]);

 Result:=STATUS_SUCCESS;
 AIrp^.IoStatus.Status:=Result;
 IoCompleteRequest(AIrp,IO_NO_INCREMENT);

 DbgMsg('hook3.pas: Hook3Close(-):0x%.8X)',[Result]);
end;


//
// device control function is called everytime DeviceIoControl is called on our
// device, it is common way how user mode app communicate with driver
//

function Hook3DeviceControl(ADeviceObject:PDeviceObject;AIrp:PIrp):NTSTATUS; stdcall;
var 
 LStack:PIoStackLocation;
 LBufIn,LBufOut:Pointer;
 LBufInLen,LBufOutLen,LCode,LRet:ULONG;
 LDevExt:PDeviceExtension;
 LBufReq:PDrvCommRequestBuffer;
 LBufRes:PDrvCommResponseBuffer;
begin
 DbgMsg('hook3.pas: Hook3DeviceControl(ADeviceObject:0x%.8X,AIrp:0x%.8X)',[ADeviceObject,AIrp]);

 LStack:=IoGetCurrentIrpStackLocation(AIrp);

 Result:=STATUS_SUCCESS;
 AIrp^.IoStatus.Information:=0;

 LCode:=LStack^.Parameters.DeviceIoControl.IoControlCode;

 //
 // for Buffered IO both input and output buffer are the same 
 // Irp->AssociatedIrp.SystemBuffer
 // 
 LBufIn:=AIrp^.AssociatedIrp.SystemBuffer;
 LBufOut:=LBufIn;
 LBufInLen:=LStack^.Parameters.DeviceIoControl.InputBufferLength;
 LBufOutLen:=LStack^.Parameters.DeviceIoControl.OutputBufferLength;

 DbgMsg('hook3.pas: Hook3DeviceControl: LCode:0x%.8X,LBufIn:0x%.8X,LBufInLen:0x%.8X,LBufOut:0x%.8X,LBufOutLen:0x%.8X',
        [LCode,LBufIn,LBufInLen,LBufOut,LBufOutLen]);  

 LBufReq:=LBufIn;
 LBufRes:=LBufOut;
 LDevExt:=ADeviceObject^.DeviceExtension;
 AIrp^.IoStatus.Information:=SizeOf(TDrvCommResponseBuffer);

 //
 // for every command we implement the functionality 
 //
 case LCode of 
  IOCTL_HOOK_START:begin
   LRet:=HookingHook;
   LBufRes^.Status:=LRet;
  end;

  IOCTL_HOOK_STOP:begin
   LRet:=HookingUnhook;
   LBufRes^.Status:=LRet;
  end;

  IOCTL_PROTECT_PROCESS:begin
   LRet:=FuncProtectProcess(LDevExt,LBufReq^.Parameters.ProtectProcess.Pid,LBufReq^.Parameters.ProtectProcess.Enable);
   LBufRes^.Status:=LRet;
  end;

  //
  // unknown codes should also be handled
  //
  else
   Result:=STATUS_INVALID_DEVICE_REQUEST;
   AIrp^.IoStatus.Information:=0;
 end;

 AIrp^.IoStatus.Status:=Result;
 IoCompleteRequest(AIrp,IO_NO_INCREMENT);

 DbgMsg('hook3.pas: Hook3DeviceControl(-):0x%.8X)',[Result]);
end;


//
// unload is called when driver is being unloaded, if we do not implement unload
// function them our driver can't be unloaded dynamically
//

procedure Hook3Unload(ADriverObject:PDriverObject); stdcall;
begin
 DbgMsg('hook3.pas: Hook3Unload(ADriverObject:0x%.8X)',[ADriverObject]);
  
 HookingUnhook;

 //free memory we've allocated for rules
 FuncFreeList(ADriverObject^.DeviceObject^.DeviceExtension);

 //cleanup everything our driver created - delete symlink and device 
 IoDeleteSymbolicLink(@DosDevName);
 IoDeleteDevice(ADriverObject^.DeviceObject);

 DbgMsg('hook3.pas: Hook3Unload(-)',[]);
end;


//
// DriverEntry is common driver entry point
//
function _DriverEntry(ADriverObject:PDriverObject;ARegistryPath:PUnicodeString):NTSTATUS; stdcall;
var
 LDevName:TUnicodeString;
 LDevObj:PDeviceObject;
 LDevExt:PDeviceExtension;
begin
 DbgMsg('hook3.pas: DriverEntry(ADriverObject:0x%.8X;ARegistryPath:0x%.8X)',[ADriverObject,ARegistryPath]);

 RtlInitUnicodeString(@LDevName,DeviceName);
 RtlInitUnicodeString(@DosDevName,DosDeviceName); 

 //
 // if we want our driver to be accessible we need to create device for it, 
 // one driver can have more devices 
 //
 Result:=IoCreateDevice(ADriverObject,SizeOf(TDeviceExtension),@LDevName,FILE_DEVICE_UNKNOWN,FILE_DEVICE_SECURE_OPEN,FALSE,LDevObj);

 if NT_SUCCESS(Result) then
 begin
  //
  // for some selected major functions we set handlers
  //
  ADriverObject^.MajorFunction[IRP_MJ_CREATE]          := @Hook3Create;
  ADriverObject^.MajorFunction[IRP_MJ_CLOSE]           := @Hook3Close;
  ADriverObject^.MajorFunction[IRP_MJ_DEVICE_CONTROL]  := @Hook3DeviceControl;
  ADriverObject^.DriverUnload                          := @Hook3Unload;

  //
  // there are few types of contexts, driver context, device context, 
  // instance context etc. 
  // second parameter of IoCreateDevice specifies size of device context 
  // we will use this memory to store our global list of rules
  //
  LDevExt:=LDevObj^.DeviceExtension;

  if LDevExt<>nil then
  begin
   //
   // we use mutex as a synchronization mechanism to maintain our list
   //
   KeInitializeMutex(@LDevExt^.RulesMutex,0);
   LDevExt^.FirstRule:=nil;
   LDevExt^.LastRule:=nil;

   //
   // this selects the method of IO, we use buffered IO as it is comfortable 
   // and effective for smaller packets
   //
   LDevObj^.Flags:=LDevObj^.Flags or DO_BUFFERED_IO;

   //
   // if we want user mode application to communicate our driver we need to make 
   // a dos device link
   //
   Result:=IoCreateSymbolicLink(@DosDevName,@LDevName);
   if not NT_SUCCESS(Result) then
   begin
    DbgMsg('hook3.pas: DriverEntry.IoCreateSymbolicLink failed with status 0x%.8X',[Result]);
    IoDeleteDevice(ADriverObject^.DeviceObject);
   end;
  end else
  begin
   DbgMsg('hook3.pas: DriverEntry error: no device extension',[]);
   IoDeleteDevice(ADriverObject^.DeviceObject);
   Result:=STATUS_NO_SUCH_DEVICE;
  end;
 end else DbgMsg('hook3.pas: DriverEntry.IoCreateDevice failed with status 0x%.8X',[Result]);

 DbgMsg('hook3.pas: DriverEntry(-):0x%.8X',[Result]);
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品欧美一区二区三区麻豆| 精品久久人人做人人爽| 免费成人在线网站| 日韩欧美的一区| 国产精品女上位| 欧美乱妇15p| 91亚洲资源网| 国产a视频精品免费观看| 日韩有码一区二区三区| 亚洲黄色小说网站| 国产精品动漫网站| 国产午夜一区二区三区| 日韩欧美第一区| 91麻豆精品国产自产在线观看一区| www..com久久爱| 国产麻豆欧美日韩一区| 免费看欧美女人艹b| 亚洲成人自拍一区| 亚洲一区二区精品久久av| 国产精品久久久久永久免费观看| 久久久久久久久99精品| 日韩欧美高清在线| 日韩欧美国产三级电影视频| 欧美美女一区二区在线观看| 欧美视频在线播放| 欧美视频一区二区三区四区| 一本色道**综合亚洲精品蜜桃冫| aaa国产一区| 99国产精品久久久久| av不卡在线观看| 成人一区二区三区视频在线观看 | 国产精品电影一区二区| 国产视频视频一区| 视频一区二区国产| 在线亚洲高清视频| 色猫猫国产区一区二在线视频| 成人h动漫精品一区二区| 激情国产一区二区| 国产精品一区二区久激情瑜伽| 国产乱码精品1区2区3区| 国产在线精品一区二区三区不卡| 久久国产麻豆精品| 国产精品一区专区| 国产成人福利片| jizzjizzjizz欧美| 91老师国产黑色丝袜在线| 一本一道波多野结衣一区二区| 色哟哟日韩精品| 欧美日韩亚洲综合| 日韩一区二区三区四区| 久久综合九色欧美综合狠狠| 国产亚洲精品资源在线26u| 国产精品毛片高清在线完整版| 最新高清无码专区| 亚洲一级二级三级| 久久精品久久精品| 成人午夜在线视频| 日本韩国欧美一区二区三区| 欧美日韩免费视频| 欧美大黄免费观看| 国产精品三级久久久久三级| 亚洲精品亚洲人成人网 | 国内精品伊人久久久久av影院| 国产自产视频一区二区三区| 成人sese在线| 欧美性色综合网| 精品久久久久久久人人人人传媒| 中文字幕免费不卡| 亚洲一二三区在线观看| 免费美女久久99| 波多野洁衣一区| 欧美日韩免费一区二区三区视频| 26uuu成人网一区二区三区| 亚洲图片你懂的| 日本午夜一本久久久综合| 国产成人在线视频网站| 欧美三级在线看| 国产视频一区在线播放| 亚洲va天堂va国产va久| 久久超碰97人人做人人爱| 9色porny自拍视频一区二区| 在线电影一区二区三区| 国产欧美日韩视频在线观看| 亚洲成在人线在线播放| 成人丝袜高跟foot| 欧美肥胖老妇做爰| 中文字幕佐山爱一区二区免费| 免费人成在线不卡| 色综合天天综合| 久久午夜羞羞影院免费观看| 亚洲国产aⅴ成人精品无吗| 成人性生交大片免费看在线播放| 欧美妇女性影城| 亚洲精品视频免费观看| 国产激情视频一区二区三区欧美| 欧美色综合网站| 中文字幕一区二区三区av| 麻豆精品一区二区av白丝在线| 色8久久精品久久久久久蜜| 久久久久久99久久久精品网站| 亚洲成在线观看| 一道本成人在线| 2021国产精品久久精品| 性做久久久久久| 在线一区二区三区四区五区| 国产欧美一区二区三区在线老狼| 午夜影院久久久| 一本色道久久加勒比精品| 国产精品午夜在线| 国产精品综合一区二区| 欧美大白屁股肥臀xxxxxx| 亚洲高清不卡在线观看| 色综合色综合色综合色综合色综合| 国产色产综合色产在线视频| 裸体健美xxxx欧美裸体表演| 欧美日韩国产片| 艳妇臀荡乳欲伦亚洲一区| 成人国产精品视频| 国产欧美精品一区aⅴ影院 | 国产成人自拍网| 国产成人精品影视| 色偷偷久久一区二区三区| 中日韩免费视频中文字幕| 国产精品中文字幕日韩精品| 日韩免费电影网站| 免费在线视频一区| 日韩一区二区在线看片| 日本不卡免费在线视频| 欧美巨大另类极品videosbest| 亚洲一区二区高清| 欧美日韩一区在线观看| 亚洲午夜国产一区99re久久| 欧美在线观看一区| 亚洲午夜在线视频| 欧美在线免费播放| 五月天视频一区| 欧美一区二区三级| 日本人妖一区二区| 精品国产免费一区二区三区香蕉| 蜜桃精品在线观看| 久久免费视频色| 成人免费精品视频| 亚洲乱码精品一二三四区日韩在线| av影院午夜一区| 樱桃视频在线观看一区| 欧美少妇bbb| 美女尤物国产一区| 久久精品一区蜜桃臀影院| fc2成人免费人成在线观看播放| 成人免费小视频| 欧美性感一类影片在线播放| 日本少妇一区二区| 久久一区二区三区国产精品| 成人h动漫精品一区二区| 亚洲欧美精品午睡沙发| 欧美揉bbbbb揉bbbbb| 麻豆精品国产91久久久久久| 国产日产欧美一区二区视频| 99久久久久久99| 天天影视涩香欲综合网| 久久久三级国产网站| 91香蕉视频在线| 欧美a级一区二区| 国产精品久久久久永久免费观看| 在线免费观看成人短视频| 日韩和欧美一区二区三区| 久久久久久免费毛片精品| 成人精品gif动图一区| 亚洲一区影音先锋| 欧美成人video| 91捆绑美女网站| 美女视频网站久久| 亚洲欧美一区二区在线观看| 欧美区一区二区三区| 国产精品白丝jk黑袜喷水| 亚洲免费观看视频| 日韩精品一区二区三区视频| 成人动漫视频在线| 五月天激情综合网| 国产精品九色蝌蚪自拍| 日韩午夜精品电影| 一道本成人在线| 极品美女销魂一区二区三区| 亚洲欧美在线视频| 精品日韩99亚洲| 欧美制服丝袜第一页| 国产一区二区三区四区五区入口| 伊人开心综合网| 久久精品亚洲麻豆av一区二区| 欧美性猛交xxxxxx富婆| 成人毛片老司机大片| 欧美高清在线精品一区| 成人黄页毛片网站| 免费欧美日韩国产三级电影| 亚洲欧美日韩中文播放| 久久天堂av综合合色蜜桃网| 欧美精品欧美精品系列| 91在线视频观看| 国产福利视频一区二区三区| 日产精品久久久久久久性色|