简单的 控制台程序与驱动

最近进展很慢 因为驱动是一个未曾涉及也未曾想过涉及的领域 加上win32驱动资料有限 所以学的稍微有点慢 还有单位制作平衡计分卡这类的企业文化方面的要求 搞得烦烦的 也算是心境方面的原因 还好 昨晚静了静心 突破了一点 :当时不太理解为什么自己写的驱动无法卸载 现在明白了 要在入口函数处定义卸载子程序的入口地址 因为以前以为卸载由系统完成 没必要自己专门写个卸载子程序 其实不是这样的 哪怕你卸载子程序里什么都没有 也要写上 只要调用了卸载子程序 就基本成功地卸掉了由startservice函数开启的驱动

 

控制台程序:

.386
.model flat,stdcall
option casemap:none

include  windows.inc
include  gdi32.inc
includelib  gdi32.lib
include  user32.inc
includelib  user32.lib
include  kernel32.inc
includelib  kernel32.lib
include  advapi32.inc
includelib  advapi32.lib

 


.data?

hInstance  dd  ?

hInstance3 dd  ? ;“安装”控件句柄
hInstance4 dd  ? ;显示安装是否成功标签
hInstance5 dd  ? ;“卸载”控件句柄
hInstance6 dd  ? ;显示卸载是否成功标签
hInstance7 dd  ? ;“启动”控件句柄
hInstance8 dd  ? ;显示启动是否成功标签
hInstance9 dd  ? ;“停止”控件句柄
hInstance10 dd  ? ;显示停止是否成功标签


hWinMain  dd  ?
;SymbolicLinkName UNICODE_STRING <>


hSCManager dd ?
hService  dd ?

acDriverPath db 250 dup (?)
hDevice  dd ?

dwInBuffer dd ?
dwOutBuffer dd ?
dwBytesReturned dd ?

.data
szsysname db '1.sys',0
szfuwuname db '1',0
szdisplayname db '11',0
sz  db '/??/d:/我的文档/桌面',0
szSymbolicLinkName  db '/','/','/','/','.','/','/','1',0

 

 
  ;.const
szClassName db 'MyClass',0
szCaptionMain db '驱动安装卸载软件',0


szButton  db 'button',0
szbiaoqian  db 'static',0
szText3 db '安装',0
szText4 db '安装成功',0
szText5 db '卸载',0
szText6 db '卸载成功',0
szErr  db '操作失败',0

DLG_MAIN equ 1

IDINSTALL equ 3
IDSHOW3  equ 4
IDUNISTALL equ 5
IDSHOW5  equ 6

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  .code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 窗口过程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcWinMain proc uses ebx edi esi,hWnd,uMsg,wParam,lParam
  
local _ss:SERVICE_STATUS

 

  mov eax,uMsg
;********************************************************************
  


;********************************************************************
; 建立控件
;********************************************************************
  .if eax == WM_CREATE   

   invoke CreateWindowEx,NULL,/  ;"安装"控件
    offset szButton,offset szText3,/
    WS_CHILD or WS_VISIBLE,/
    10,10,50,20,/
    hWnd,3,hInstance3,NULL
   invoke CreateWindowEx,NULL,/  ;显示安装是否成功标签
    offset szbiaoqian,NULL,/
    WS_CHILD or WS_VISIBLE,/
    70,10,200,20,/
    hWnd,4,hInstance4,NULL

 

   invoke CreateWindowEx,NULL,/  ;"卸载"控件
    offset szButton,offset szText5,/
    WS_CHILD or WS_VISIBLE,/
    10,40,50,20,/
    hWnd,5,hInstance5,NULL
   invoke CreateWindowEx,NULL,/  ;显示卸载是否成功标签
    offset szbiaoqian,NULL,/
    WS_CHILD or WS_VISIBLE,/
    70,40,200,20,/
    hWnd,6,hInstance6,NULL

 

 

     
;********************************************************************
;按下这个按钮
;********************************************************************
  .elseif eax == WM_COMMAND
   mov eax,wParam
    
    .if ax == IDINSTALL
     invoke OpenSCManager,NULL,NULL,SC_MANAGER_ALL_ACCESS
     .if eax
      mov hSCManager,eax

      push eax
      invoke GetFullPathName,addr szsysname,sizeof acDriverPath,addr acDriverPath,esp     
      pop eax
    
          
      invoke CreateService,hSCManager,addr szfuwuname,addr szdisplayname,SERVICE_ALL_ACCESS,SERVICE_KERNEL_DRIVER,SERVICE_DEMAND_START,SERVICE_ERROR_IGNORE,addr acDriverPath,NULL,NULL,NULL,NULL,NULL

      .if eax
       mov hService, eax       
       invoke SetDlgItemText,hWnd,4,addr szText4
      .else
       invoke SetDlgItemText,hWnd,4,addr szErr
      .endif


      ;invoke  OpenService,hSCManager,addr szsysname,SERVICE_ALL_ACCESS
      invoke StartService,hService,NULL,NULL

     .endif     

    .elseif ax == IDUNISTALL
     invoke OpenSCManager,NULL,NULL,SC_MANAGER_ALL_ACCESS
     mov hSCManager,eax
     
     invoke OpenService,hSCManager,addr szfuwuname,SERVICE_ALL_ACCESS
     mov hService,eax
     
     invoke ControlService,hService,SERVICE_CONTROL_STOP,addr _ss
    

     .if eax
      invoke SetDlgItemText,hWnd,6,addr szText6
     .else
      invoke SetDlgItemText,hWnd,6,addr szErr
     .endif
     invoke DeleteService,hService
     invoke CloseServiceHandle,hService     
     invoke CloseServiceHandle,hSCManager
     
     
    
    .endif       
;********************************************************************
  .elseif eax == WM_CLOSE
   
   
   invoke DestroyWindow,hWinMain
   invoke PostQuitMessage,NULL
;********************************************************************
  .else
   invoke DefWindowProc,hWnd,uMsg,wParam,lParam
   ret
  .endif
;********************************************************************
  xor eax,eax
  ret

_ProcWinMain  endp


;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_WinMain proc
  local @stWndClass:WNDCLASSEX
  local @stMsg:MSG

  invoke GetModuleHandle,NULL
  mov hInstance,eax
  invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
;********************************************************************
; 注册窗口类
;********************************************************************
  invoke LoadCursor,0,IDC_ARROW
  mov @stWndClass.hCursor,eax
  push hInstance
  pop @stWndClass.hInstance
  mov @stWndClass.cbSize,sizeof WNDCLASSEX
  mov @stWndClass.style,CS_HREDRAW or CS_VREDRAW
  mov @stWndClass.lpfnWndProc,offset _ProcWinMain
  mov @stWndClass.hbrBackground,COLOR_WINDOW + 1
  mov @stWndClass.lpszClassName,offset szClassName
  invoke RegisterClassEx,addr @stWndClass
;********************************************************************
; 建立并显示窗口
;********************************************************************
  invoke CreateWindowEx,WS_EX_CLIENTEDGE,offset szClassName,offset szCaptionMain,/
   WS_OVERLAPPEDWINDOW,/
   830,50,400,200,/
   NULL,NULL,hInstance,NULL
  mov hWinMain,eax
  invoke ShowWindow,hWinMain,SW_SHOWNORMAL
  invoke UpdateWindow,hWinMain
;********************************************************************
; 消息循环
;********************************************************************
  .while TRUE
   invoke GetMessage,addr @stMsg,NULL,0,0
   .break .if eax == 0
   invoke TranslateMessage,addr @stMsg
   invoke DispatchMessage,addr @stMsg
  .endw
  ret

_WinMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
  call _WinMain
  invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

 

 

 

 

 

**************************************************

**************************************************

**************************************************

 

驱动程序:

.386
.model flat, stdcall
option casemap:none

include w2k/ntstatus.inc
include w2k/ntddk.inc
include w2k/ntoskrnl.inc 
include w2k/w2kundoc.inc
includelib ntoskrnl.lib

 


..code
DriverUnload proc pDriverObject:PDRIVER_OBJECT

pushad
 

popad
ret
DriverUnload endp

 

.code INIT

DriverEntry proc pDriverObject:PDRIVER_OBJECT,pusRegistryPath:PUNICODE_STRING
local status:NTSTATUS
local pDeviceObject:PVOID

 

 

  mov eax, pDriverObject
  assume eax:PTR DRIVER_OBJECT

  mov [eax].DriverUnload,offset DriverUnload
    assume eax:nothing
  mov status, STATUS_SUCCESS
mov eax,STATUS_SUCCESS

ret

DriverEntry endp

end DriverEntry

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值