VB 驱动控制类

来源:互联网 发布:淘宝运动服套装 编辑:程序博客网 时间:2024/05/29 16:09
  1. Option Explicit
  2. Private Const STANDARD_RIGHTS_REQUIRED = 
  3. Private Const SC_MANAGER_CONNECT = 
  4. Private Const SC_MANAGER_CREATE_SERVICE = 
  5. Private Const SC_MANAGER_ENUMERATE_SERVICE = 
  6. Private Const SC_MANAGER_LOCK = 
  7. Private Const SC_MANAGER_QUERY_LOCK_STATUS = 
  8. Private Const SC_MANAGER_MODIFY_BOOT_CONFIG = 
  9. Private Const SC_MANAGER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or _
  10.                                        SC_MANAGER_CONNECT Or _
  11.                                        SC_MANAGER_CREATE_SERVICE Or _
  12.                                        SC_MANAGER_ENUMERATE_SERVICE Or _
  13.                                        SC_MANAGER_LOCK Or _
  14.                                        SC_MANAGER_QUERY_LOCK_STATUS Or _
  15.                                        SC_MANAGER_MODIFY_BOOT_CONFIG)
  16. Private Const SERVICE_KERNEL_DRIVER = 1
  17. Private Type SERVICE_STATUS
  18.     dwCurrentState   As Long
  19.     dwServiceType   As Long
  20.     dwControlsAccepted   As Long
  21.     dwWin32ExitCode   As Long
  22.     dwServiceSpecificExitCode   As Long
  23.     dwCheckPoint   As Long
  24.     dwWaitHint   As Long
  25. End Type
  26. Private Const SERVICE_AUTO_START = 2
  27. Private Const SERVICE_DEMAND_START = 3
  28. Private Const SERVICE_ERROR_NORMAL = 1
  29. Private Const SERVICE_CONTROL_STOP = 
  30. Private Const SERVICE_CONTROL_PAUSE = 
  31. Private Const SERVICE_CONTROL_CONTINUE = 
  32. Private Const SERVICE_CONTROL_INTERROGATE = 
  33. Private Const SERVICE_CONTROL_SHUTDOWN = 
  34. Private Const SERVICE_QUERY_CONFIG = &H1
  35. Private Const SERVICE_CHANGE_CONFIG = &H2
  36. Private Const SERVICE_QUERY_STATUS = &H4
  37. Private Const SERVICE_ENUMERATE_DEPENDENTS = &H8
  38. Private Const SERVICE_START = &H10
  39. Private Const SERVICE_STOP = &H20
  40. Private Const SERVICE_PAUSE_CONTINUE = &H40
  41. Private Const SERVICE_INTERROGATE = &H80
  42. Private Const SERVICE_USER_DEFINED_CONTROL = &H100
  43. Private Const SERVICE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or _
  44.                                     SERVICE_QUERY_CONFIG Or _
  45.                                     SERVICE_CHANGE_CONFIG Or _
  46.                                     SERVICE_QUERY_STATUS Or _
  47.                                     SERVICE_ENUMERATE_DEPENDENTS Or _
  48.                                     SERVICE_START Or _
  49.                                     SERVICE_STOP Or _
  50.                                     SERVICE_PAUSE_CONTINUE Or _
  51.                                     SERVICE_INTERROGATE Or _
  52.                                     SERVICE_USER_DEFINED_CONTROL)
  53. Private Declare Function OpenSCManager _
  54.       Lib "advapi32" Alias "OpenSCManagerW" _
  55.       (ByVal lpMachineName As LongByVal lpDatabaseName As Long, _
  56.       ByVal dwDesiredAccess As LongAs Long
  57.       
  58. Private Declare Function CreateService _
  59.       Lib "advapi32" Alias "CreateServiceW" _
  60.       (ByVal hSCManager As LongByVal lpServiceName As Long, _
  61.       ByVal lpDisplayName As LongByVal dwDesiredAccess As Long, _
  62.       ByVal dwServiceType As LongByVal dwStartType As Long, _
  63.       ByVal dwErrorControl As LongByVal lpBinaryPathName As Long, _
  64.       ByVal lpLoadOrderGroup As LongByVal lpdwTagId As Long, _
  65.       ByVal lpDependencies As LongByVal lpServiceStartName As Long, _
  66.       ByVal lpPassword As LongAs Long
  67.       
  68. Private Declare Function DeleteService _
  69.       Lib "advapi32" (ByVal hService As LongAs Long
  70.       
  71. Private Declare Function CloseServiceHandle _
  72.       Lib "advapi32" (ByVal hSCObject As LongAs Long
  73.       
  74. Private Declare Function OpenService _
  75.       Lib "advapi32" Alias "OpenServiceW" _
  76.       (ByVal hSCManager As LongByVal lpServiceName As Long, _
  77.       ByVal dwDesiredAccess As LongAs Long
  78.       
  79. Private Declare Function StartService Lib "advapi32" _
  80.         Alias "StartServiceW" (ByVal hService As Long, _
  81.         ByVal dwNumServiceArgs As LongByVal lpServiceArgVectors As LongAs Long
  82.         
  83. Private Declare Function ChangeServiceConfig2 Lib "advapi32" Alias "ChangeServiceConfig2W" (ByVal hService As Long, _
  84.         ByVal dwInfoLevel As Long, lpInfo As Any) As Long
  85.         
  86. Private Declare Function ControlService Lib "advapi32" _
  87.         (ByVal hService As LongByVal dwControl As Long, _
  88.         lpServiceStatus As SERVICE_STATUS) As Long
  89.                                       
  90. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  91. '驱动控制相关
  92. Private Const OPEN_EXISTING As Long = 3
  93. Private Const GENERIC_READ As Long = 
  94. Private Const GENERIC_WRITE As Long = 
  95. Private Const FILE_ATTRIBUTE_NORMAL = 
  96. Private Const FILE_DEVICE_UNKNOWN As Long = 
  97. Private Const FILE_SHARE_READ = 
  98. Private Const FILE_SHARE_WRITE = 
  99. Private Declare Function CreateFile Lib "KERNEL32" Alias "CreateFileA" (ByVal lpFileName As StringByVal dwDesiredAccess As LongByVal dwShareMode As Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As LongByVal dwFlagsAndAttributes As LongByVal hTemplateFile As LongAs Long
  100. Private Declare Function CloseHandle Lib "KERNEL32.DLL" (ByVal hObject As LongAs Long
  101. Public Declare Function DeviceIoControl Lib "KERNEL32.DLL" (ByVal hDevice As LongByVal dwIoControlCode As LongByRef lpInBuffer As Any, ByVal nInBufferSize As LongByRef lpOutBuffer As Any, ByVal nOutBufferSize As LongByRef lpBytesReturned As LongByRef lpOverlapped As Any) As Long
  102. Private mstrDriverName As String '驱动名称
  103. Private mstrDisplayName As String
  104. Private mhManager As Long
  105. Private mhDriver As Long
  106. Private mblnShare As Boolean
  107. Public Function CHLoadDriver(ByVal lpDriverPath As StringAs Boolean
  108.     Dim hService As Long
  109.     Dim blnOk As Boolean
  110.     mhManager = OpenSCManager(0, 0, SC_MANAGER_ALL_ACCESS)
  111.     If mhManager = 0 Then Exit Function
  112.     hService = CreateService(mhManager, _
  113.                              StrPtr(mstrDriverName), _
  114.                              StrPtr(mstrDisplayName), _
  115.                              SERVICE_ALL_ACCESS, _
  116.                              SERVICE_KERNEL_DRIVER, _
  117.                              SERVICE_DEMAND_START, _
  118.                              SERVICE_ERROR_NORMAL, _
  119.                              StrPtr(lpDriverPath), _
  120.                              0, _
  121.                              0, _
  122.                              0, _
  123.                              0, _
  124.                              0)
  125.     If hService Then
  126.         If StartService(hService, 0, 0) Then
  127.             blnOk = True
  128.         End If
  129.         Call CloseServiceHandle(hService)
  130.     Else
  131.         hService = OpenService(mhManager, StrPtr(mstrDriverName), SERVICE_START)
  132.         If hService Then
  133.             If StartService(hService, 0, 0) Then
  134.                 blnOk = True
  135.             End If
  136.             Call CloseServiceHandle(hService)
  137.         End If
  138.     End If
  139.     LoadDriver = blnOk
  140. End Function
  141. Public Function CHUnLoadDriver() As Boolean
  142.     Dim objState As SERVICE_STATUS
  143.     Dim hService As Long
  144.     Dim blnOk As Boolean
  145.     hService = OpenService(mhManager, StrPtr(mstrDriverName), SERVICE_ALL_ACCESS)
  146.     If hService Then
  147.         If ControlService(hService, SERVICE_CONTROL_STOP, objState) Then
  148.             If DeleteService(hService) Then
  149.                 blnOk = True
  150.             End If
  151.         End If
  152.         Call CloseServiceHandle(hService)
  153.     End If
  154.     Call CloseServiceHandle(mhManager)
  155.     UnLoadDriver = blnOk
  156. End Function
  157. Public Function CHDeviceIoControl(ByVal dwIoControlCode As LongByVal lpInBuffer As LongByVal nInBufferSize As LongByVal lpOutBuffer As LongByVal nOutBufferSize As LongByRef lpBytesReturned As LongAs Boolean
  158.     CHDeviceIoControl = DeviceIoControl(mhDriver, dwIoControlCode, lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesReturned, ByVal 0&)
  159. End Function
  160. Public Property Get DriverHandle() As Long
  161.     If mhDriver = 0 Then
  162.         If mblnShare Then
  163.             mhDriver = CreateFile("//./" & mstrDriverName, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
  164.         Else
  165.             mhDriver = CreateFile("//./" & mstrDriverName, GENERIC_READ Or GENERIC_WRITE, 0, ByVal 0&, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
  166.         End If
  167.     End If
  168.     DriverHandle = mhDriver
  169. End Property
  170. 'Private Property Let DriverName(ByVal New_Value As Long)
  171. '    mhDriver = New_Value
  172. 'End Property
  173. Public Property Get ShareControl() As Boolean
  174.     ShareControl = mblnShare
  175. End Property
  176. Public Property Let ShareControl(ByVal New_Value As Boolean)
  177.     mblnShare = New_Value
  178. End Property
  179. Public Property Get DriverName() As String
  180.     DriverName = mstrDriverName
  181. End Property
  182. Public Property Let DriverName(ByVal New_Value As String)
  183.     mstrDriverName = New_Value
  184. End Property
  185. Public Property Get DisplayName() As String
  186.     DriverName = mstrDisplayName
  187. End Property
  188. Public Property Let DisplayName(ByVal New_Value As String)
  189.     mstrDisplayName = New_Value
  190. End Property
  191. Private Sub Class_Initialize()
  192.     mblnShare = True
  193. End Sub
  194. Private Sub Class_Terminate()
  195.     CloseHandle mhDriver
  196. End Sub