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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? load.c

?? 驅(qū)動層Hook系統(tǒng)內(nèi)核調(diào)用的
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 driver loader is used to install the driver via service manager 
 it also sends some commands to driver
 usage is simple: load driver_name driver_display_name path
 you can use loadhook.bat 

 second thread was added to receive events from driver 
 it uses asynchronous IO to manage this
 see description in the main driver file for more
*/

#include <windows.h>
#include <stdio.h>
#include <ddk/ntddk.h>
#include "../drvcomm.h"


int work=0;                                     //indicator of application status
HANDLE notify_event;                            //sync event between notify thread and main thread
int notify_type;                                //type of driver notification
DWORD notify_data;                              //driver notification data
HANDLE notify_dev;                              //notify thread device file

/*
 second thread manages notifications from driver
 we do not take any action if something in this thread failed
 however, for the functionality of our program this thread is important 
 so in real world program this should be handled too
 also synchronization is missing in this example
*/

DWORD WINAPI notify_thread(LPVOID args)
{
  printf("Notify thread runs\n");
  HANDLE notify_dev=CreateFile(args,GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,
                               NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
  if (notify_dev==INVALID_HANDLE_VALUE) notify_dev=0;
  if (notify_dev)
  {
    OVERLAPPED overlapped;
    overlapped.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);

    if (overlapped.hEvent)
    {
      while (work)
      {
        DRVCOMM_REQUEST_BUFFER buf_req;
        DRVCOMM_RESPONSE_BUFFER buf_res;
        memset(&buf_req,0,sizeof(buf_req));
        memset(&buf_res,0,sizeof(buf_res));

        DWORD bytes;
        int ret=DeviceIoControl(notify_dev,IOCTL_NOTIFY,NULL,0,&buf_res,sizeof(buf_res),&bytes,&overlapped);

        int err=ret?0:GetLastError();

        if (err==ERROR_IO_PENDING)
        {
          if (GetOverlappedResult(notify_dev,&overlapped,&bytes,TRUE)) err=0;
          else err=GetLastError();
        }

        if (err)
        {
          if (err==ERROR_OPERATION_ABORTED) printf("Notify thread received exit signal\n");
          else printf("Notify thread error: unexpected DeviceIoControl error %d\n",err);
          break;
        }

        if (!bytes || !buf_res.status)
        {
          printf("Notify thread communication error: bytes=%d; buf_res.status=0x%.8X\n",bytes,buf_res.status);
          break;
        }

        /*
         we've received notification from driver
         we'll contact second thread for user input 
        */
        HKEY key;
        char name[512],*svc_name,imagepath[512],svc_path[512];
        DWORD imagepath_len=sizeof(imagepath);
        memset(imagepath,0,imagepath_len);
        err=0;

        switch (buf_res.type)
        {
          case RESPONSE_NOTIFY_LOAD_DRIVER_CHECK:
            /*
             we've got a system registry path to Services in HKLM, we open it and read ImagePath from there
            */
            notify_type=RESPONSE_NOTIFY_LOAD_DRIVER_CHECK;
            notify_data=(ULONG)&buf_res.parameters.load_driver_check.regpath;

            err=3;
            sprintf(name,"%S\0",&buf_res.parameters.load_driver_check.regpath);
            svc_name=strrchr(name,'\\');
            svc_name++;

            if (svc_name && *svc_name)
            {
              err--;
              sprintf(svc_path,"SYSTEM\\CurrentControlSet\\Services\\%s\0",svc_name);

              if (ret=RegOpenKeyEx(HKEY_LOCAL_MACHINE,svc_path,0,KEY_QUERY_VALUE,&key)==ERROR_SUCCESS)
              {
                err--;
                printf("Notify thread: RESPONSE_NOTIFY_LOAD_DRIVER_CHECK received, you should make a decision:\n");

                if (ret=RegQueryValueEx(key,"ImagePath",NULL,NULL,imagepath,&imagepath_len)==ERROR_SUCCESS)
                {
                  err--;
                  printf("permit loading driver ServiceName=%s ImagePath=%s for process pid=%d?\n",
                         svc_name,imagepath,buf_res.parameters.load_driver_check.caller_pid);

                  PulseEvent(notify_event);
                  WaitForSingleObject(notify_event,INFINITE);
                  printf("Notify thread wait done, answer = %s\n",notify_data?"deny":"permit");
                }
              }
            }

            if (err)
            {
              printf("Notify thread: RESPONSE_NOTIFY_LOAD_DRIVER_CHECK received, but error occurred: ");
              switch (err)
              {
                case 1:printf("RegQueryValueEx for ImagePath failed with code %d",ret); break;
                case 2:printf("RegOpenKeyEx failed with code %d",ret); break;
                case 3:printf("invalid service name"); break;
              }

              //something went wrong -> deny access
              printf(" -> denying access");
              notify_data=0;
            }
            buf_req.parameters.load_driver_check.permit=notify_data;
            ret=DeviceIoControl(notify_dev,IOCTL_NOTIFY_LOAD_DRIVER_CHECK,&buf_req,sizeof(buf_req),NULL,0,&bytes,&overlapped);

            if (!ret && (GetLastError()==ERROR_IO_PENDING)) GetOverlappedResult(notify_dev,&overlapped,&bytes,TRUE);
            break;


          case RESPONSE_NOTIFY_PHYSICAL_MEMORY_CHECK:
            printf("Notify thread: RESPONSE_NOTIFY_PROCESS_CHECK received, you should make a decision:\n");
            notify_type=RESPONSE_NOTIFY_PHYSICAL_MEMORY_CHECK;
            notify_data=0;

            printf("permit 0x%.8X access for process pid=%d to \\Device\\PhysicalMemory section object\n",
                   buf_res.parameters.physical_memory_check.access,buf_res.parameters.physical_memory_check.caller_pid);

            PulseEvent(notify_event);
            WaitForSingleObject(notify_event,INFINITE);
            printf("Notify thread wait done, answer = %s\n",notify_data?"deny":"permit");

            buf_req.parameters.physical_memory_check.permit=notify_data;
            ret=DeviceIoControl(notify_dev,IOCTL_NOTIFY_PHYSICAL_MEMORY_CHECK,&buf_req,sizeof(buf_req),NULL,0,&bytes,&overlapped);

            if (!ret && (GetLastError()==ERROR_IO_PENDING)) GetOverlappedResult(notify_dev,&overlapped,&bytes,TRUE);
            break;


          case RESPONSE_NOTIFY_PROCESS_CHECK:
            printf("Notify thread: RESPONSE_NOTIFY_PROCESS_CHECK received, you should make a decision:\n");
            notify_type=RESPONSE_NOTIFY_PROCESS_CHECK;
            notify_data=buf_res.parameters.process_check.pid;

            printf("permit 0x%.8X access for process pid=%d to process pid=%d?\n",
                   buf_res.parameters.process_check.access,buf_res.parameters.process_check.caller_pid,notify_data);

            PulseEvent(notify_event);
            WaitForSingleObject(notify_event,INFINITE);
            printf("Notify thread wait done, answer = %s\n",notify_data?"deny":"permit");

            buf_req.parameters.process_check.permit=notify_data;
            ret=DeviceIoControl(notify_dev,IOCTL_NOTIFY_PROCESS_CHECK,&buf_req,sizeof(buf_req),NULL,0,&bytes,&overlapped);

            if (!ret && (GetLastError()==ERROR_IO_PENDING)) GetOverlappedResult(notify_dev,&overlapped,&bytes,TRUE);
            break;


          case RESPONSE_NOTIFY_FILE_CHECK:
            printf("Notify thread: RESPONSE_NOTIFY_FILE_CHECK received, you should make a decision:\n");
            notify_type=RESPONSE_NOTIFY_FILE_CHECK;
            notify_data=(ULONG)buf_res.parameters.file_check.name;

            printf("permit 0x%.8X access for process pid=%d to file=%S?\n",
                   buf_res.parameters.file_check.access,buf_res.parameters.file_check.caller_pid,notify_data);

            PulseEvent(notify_event);
            WaitForSingleObject(notify_event,INFINITE);
            printf("Notify thread wait done, answer = %s\n",notify_data?"deny":"permit");

            buf_req.parameters.file_check.permit=notify_data;
            ret=DeviceIoControl(notify_dev,IOCTL_NOTIFY_FILE_CHECK,&buf_req,sizeof(buf_req),NULL,0,&bytes,&overlapped);

            if (!ret && (GetLastError()==ERROR_IO_PENDING)) GetOverlappedResult(notify_dev,&overlapped,&bytes,TRUE);
            break;


          default:
            printf("Notify thread error: unknown response buffer type\n");
        }
      }
      CloseHandle(overlapped.hEvent);
    } else printf("Notify thread error: unable to create event\n");

    CloseHandle(notify_dev);
  } else printf("Notify thread error: unable to connect device\n");

  printf("Notify thread terminates\n");
  ExitThread(0);
}


/*
 converts X:\directory\file.ext to \Device\???\directory\file.ext
 where ??? could be HarddiskVolumeX or CdRomX or any other device
 returns 0 if error, nonzero otherwise
*/

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
毛片av中文字幕一区二区| 欧美日韩一区二区三区四区| 在线视频国内一区二区| 777xxx欧美| 亚洲欧洲另类国产综合| 美女网站视频久久| 欧美亚洲综合一区| 中国av一区二区三区| 麻豆成人久久精品二区三区小说| 东方aⅴ免费观看久久av| 在线91免费看| 一区二区三区四区精品在线视频| 韩日av一区二区| 91精品国产一区二区| 一区二区免费视频| av亚洲产国偷v产偷v自拍| 精品剧情在线观看| 天天影视涩香欲综合网| 一本一本久久a久久精品综合麻豆| 日韩精品一区二区三区蜜臀| 首页亚洲欧美制服丝腿| 色综合天天视频在线观看| 久久精品视频在线免费观看| 免费精品视频最新在线| 欧美群妇大交群的观看方式| 亚洲日本欧美天堂| 成人动漫av在线| 亚洲国产成人私人影院tom| 日韩精品国产精品| 精品少妇一区二区三区在线视频| 亚洲图片自拍偷拍| 欧美日韩成人激情| 亚洲地区一二三色| 91精品国产综合久久精品图片| 亚洲黄色在线视频| 91久久精品一区二区二区| 亚洲欧美精品午睡沙发| 色婷婷狠狠综合| 一区二区三区在线观看视频| 在线视频综合导航| 亚洲资源中文字幕| 91精品啪在线观看国产60岁| 日韩成人一区二区三区在线观看| 91精品午夜视频| 天堂一区二区在线| 日韩一区二区电影在线| 日韩成人精品视频| 欧美变态tickle挠乳网站| 国产一区二区三区最好精华液| 久久久久久久久久久久久久久99| 高清不卡在线观看| 国产一区二区美女| 日韩高清一区在线| 成人黄色av网站在线| 国产亚洲成av人在线观看导航| 国产成人免费9x9x人网站视频| 亚洲国产精品二十页| 97se亚洲国产综合自在线观| 亚洲精品欧美综合四区| 欧美日韩激情一区二区| 久久成人免费网| 国产精品久久久久久久久晋中 | 欧美日韩mp4| 奇米色777欧美一区二区| 久久久久久久久久久久久夜| 99r国产精品| 天天爽夜夜爽夜夜爽精品视频| 欧美成人三级电影在线| 成人小视频免费在线观看| 亚洲自拍与偷拍| 精品剧情v国产在线观看在线| 成人免费视频一区| 图片区小说区区亚洲影院| 久久精品视频免费观看| 在线观看亚洲精品视频| 国产一区二区三区四区五区美女 | 欧美精品第1页| 国产精品一区不卡| 午夜精品福利一区二区三区蜜桃| 久久成人免费网| 精品对白一区国产伦| 日本道精品一区二区三区 | 免费成人av资源网| 国产精品亚洲第一| 成人av电影在线| 中文字幕在线一区| 国产成人av一区二区| 欧美精品tushy高清| 日韩精品电影在线观看| 在线一区二区三区| 久久av老司机精品网站导航| 欧美色网站导航| 欧美变态tickle挠乳网站| 日本午夜精品一区二区三区电影| 国产精品天干天干在线综合| 91精品国产一区二区| 91小视频免费观看| 高清av一区二区| 久久99国产精品尤物| 香蕉久久一区二区不卡无毒影院| 国产精品嫩草影院av蜜臀| 精品国产sm最大网站免费看| 欧美日韩三级一区二区| 欧洲一区二区三区在线| 91在线播放网址| av成人免费在线| 国产一区二区毛片| 国内精品久久久久影院色 | 丝袜美腿亚洲综合| 亚洲黄色性网站| 亚洲视频网在线直播| 日本一区二区三区久久久久久久久不| 亚洲精品国产视频| 国产女人18水真多18精品一级做| 夜夜爽夜夜爽精品视频| 欧美精品少妇一区二区三区 | 国产亚洲精品bt天堂精选| 久久众筹精品私拍模特| 久久久久久日产精品| 337p日本欧洲亚洲大胆色噜噜| 777亚洲妇女| 免播放器亚洲一区| 色婷婷国产精品综合在线观看| 日韩影视精彩在线| 亚洲精品精品亚洲| 国产精品不卡在线| 亚洲精品你懂的| 久久久不卡影院| 久久久久88色偷偷免费| 国产精品网站在线| 国产精品欧美一区喷水| 欧美一级xxx| 欧美日韩中文精品| 国产精品国模大尺度视频| 91激情在线视频| 欧美日韩国产免费| 欧美一区二区三区免费视频| 日韩精品一区在线观看| 国产日产欧美一区| 亚洲丝袜美腿综合| 午夜精品久久久久久不卡8050| 日韩国产高清在线| 国产成人精品一区二| 91丨porny丨在线| 欧美另类变人与禽xxxxx| 日韩欧美国产一区二区在线播放| 久久久一区二区三区捆绑**| 自拍偷拍欧美精品| 免费观看成人鲁鲁鲁鲁鲁视频| 国产激情偷乱视频一区二区三区| 色综合咪咪久久| 日韩精品中文字幕一区| 欧美国产综合一区二区| 亚洲国产欧美日韩另类综合| 久久99久久精品欧美| 91视频在线观看免费| 91精品国产综合久久久久久久| 久久色成人在线| 亚洲最色的网站| 激情小说欧美图片| 日本韩国一区二区三区| 国产视频视频一区| 无码av免费一区二区三区试看| 国产成人精品三级麻豆| 欧美久久久久久蜜桃| 国产精品久久国产精麻豆99网站| 日韩av一区二区三区四区| 91麻豆国产香蕉久久精品| 精品蜜桃在线看| 午夜欧美在线一二页| 99久久99精品久久久久久| 欧美美女一区二区| 国产精品久久久久久久浪潮网站| 日本成人在线看| 一本色道久久加勒比精品| 久久人人97超碰com| 视频一区欧美精品| 日本乱码高清不卡字幕| 国产精品毛片a∨一区二区三区| 免费欧美在线视频| 欧美群妇大交群中文字幕| 亚洲黄色小说网站| 97成人超碰视| 亚洲国产精品传媒在线观看| 麻豆久久久久久| 91精品国模一区二区三区| 一二三四社区欧美黄| 99精品欧美一区二区三区小说 | 久久99精品网久久| 欧美日韩中文字幕一区二区| 亚洲精品成人在线| 91视频.com| 亚洲欧美日韩电影| 99精品视频中文字幕| 国产精品入口麻豆原神| 国产又粗又猛又爽又黄91精品| 2024国产精品| 国产成人精品亚洲午夜麻豆| 久久美女艺术照精彩视频福利播放| 蜜桃视频在线一区|