Jump to content

check usb unique id, and lock if not allowed. some help?


Recommended Posts

Hi can someone help me with this?

Im trying to make a program that when a usb key is inserted, it reads the unique id of the stick.

If the unique id is not the same as my own, then it runs a security program.

If it is the same, then it opens explorer.

im very new to autoIT, so any help would be great!

I found the code for the unique usb id from this thread

http://www.autoitscript.com/forum/index.php?showtopic=110154&st=0&p=774103&hl=usb%20detect&fromsearch=1&#entry774103

so credit to the original author.

trComputer = "localhost"
$objWMIServices = ObjGet("winmgmts:" & "{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2")
$sink = ObjCreate("WbemScripting.SWbemSink")
ObjEvent($sink, "SINK_")
$objWMIServices.ExecNotificationQueryAsync($sink, "SELECT * FROM __InstanceOperationEvent WITHIN 5 WHERE " & "TargetInstance ISA 'Win32_LogicalDisk'")

$aDrives = DriveGetDrive("Removable")

For $i = 1 To $aDrives[0]
    $id = _GetPNPDeviceID($aDrives[$i])
Next

Func _GetPNPDeviceID($drive, $fullid = 0)
    $objWMIService = ObjGet("winmgmts:{impersonationLevel=Impersonate}!\\.\root\cimv2")
    If Not IsObj($objWMIService) Then Return -1

    $colDevice = $objWMIService.ExecQuery("SELECT * from Win32_LogicalDiskToPartition")
    $var = ""
    For $objItem In $colDevice
        If StringInStr($objItem.Dependent, $drive) Then
            $var = StringTrimLeft($objItem.Antecedent, StringInStr($objItem.Antecedent, "="))
        EndIf
    Next
    If Not $var Then Return -2

    $colDevice = $objWMIService.ExecQuery("SELECT * from Win32_DiskDriveToDiskPartition")
    $diskpartition = $var
    $var = ""
    For $objItem In $colDevice
        If StringInStr($objItem.Dependent, $diskpartition) Then
            $var = StringTrimLeft($objItem.Antecedent, StringInStr($objItem.Antecedent, "="))
        EndIf
    Next
    If Not $var Then Return -3

    $colDevice = $objWMIService.ExecQuery("SELECT * from Win32_DiskDrive")
    $physicaldrive = StringReplace(StringReplace($var, "\\", "\"), '"', "")
    $var = ""
    For $objItem In $colDevice
        If $objItem.DeviceID = $physicaldrive Then
            $var = $objItem.PNPDeviceID
        EndIf
    Next
    If Not $var Then Return -4

    If Not $fullid Then $var = StringTrimLeft($var, StringInStr($var, "\", 0, -1))
    Return $var
EndFunc

Func sink_OnObjectReady($objObject, $objAsyncContext)
    Local $choice
    If $objObject.TargetInstance.DriveType = 2 Then
        Select
        Case $objObject.Path_.Class () = "__InstanceCreationEvent"
            ;
            if $id = "J7CUV1T7&0" Then
                Run("explorer.exe " & "h:\")
            Else
                Run("C:\Users\mike\Desktop\Security.exe")
            EndIf
            ;
                Case $objObject.Path_.Class () = "__InstanceDeletionEvent"
                Case Else 
        EndSelect
    EndIf
EndFunc
Edited by royalmarine
Link to comment
Share on other sites

I modify a bit...

Global $_Drive
$strComputer = "localhost"
$objWMIServices = ObjGet("winmgmts:" & "{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2")
$sink = ObjCreate("WbemScripting.SWbemSink")
ObjEvent($sink, "SINK_")
$objWMIServices.ExecNotificationQueryAsync($sink, "SELECT * FROM __InstanceOperationEvent WITHIN 5 WHERE " & "TargetInstance ISA 'Win32_LogicalDisk'")

While 1
   $aDrives = DriveGetDrive("Removable")
    For $i = 1 To UBound ( $aDrives ) -1 
        $_Drive = $aDrives[$i]
        $id = _GetPNPDeviceID($aDrives[$i]) ; ConsoleWrite ( $aDrives[$i] & " $id : " & $id & @Crlf )
    Next
    Sleep ( 500 )
WEnd

Func _GetPNPDeviceID($drive, $fullid = 0)
    $objWMIService = ObjGet("winmgmts:{impersonationLevel=Impersonate}!\\.\root\cimv2")
    If Not IsObj($objWMIService) Then Return -1
    $colDevice = $objWMIService.ExecQuery("SELECT * from Win32_LogicalDiskToPartition")
    $var = ""
    For $objItem In $colDevice
        If StringInStr($objItem.Dependent, $drive) Then
            $var = StringTrimLeft($objItem.Antecedent, StringInStr($objItem.Antecedent, "="))
        EndIf
    Next
    If Not $var Then Return -2
    $colDevice = $objWMIService.ExecQuery("SELECT * from Win32_DiskDriveToDiskPartition")
    $diskpartition = $var
    $var = ""
    For $objItem In $colDevice
        If StringInStr($objItem.Dependent, $diskpartition) Then
            $var = StringTrimLeft($objItem.Antecedent, StringInStr($objItem.Antecedent, "="))
        EndIf
    Next
    If Not $var Then Return -3
    $colDevice = $objWMIService.ExecQuery("SELECT * from Win32_DiskDrive")
    $physicaldrive = StringReplace(StringReplace($var, "\\", "\"), '"', "")
    $var = ""
    For $objItem In $colDevice
        If $objItem.DeviceID = $physicaldrive Then
            $var = $objItem.PNPDeviceID
        EndIf
    Next
    If Not $var Then Return -4
    If Not $fullid Then $var = StringTrimLeft($var, StringInStr($var, "\", 0, -1))
    Return $var
EndFunc

Func sink_OnObjectReady($objObject, $objAsyncContext)
    Local $choice
    If $objObject.TargetInstance.DriveType = 2 Then
        Select
        Case $objObject.Path_.Class () = "__InstanceCreationEvent"
            if $id = "J7CUV1T7&0" Then
                Run("explorer.exe " & $_Drive & "\")
            Else
                Run("C:\Users\mike\Desktop\Security.exe")
            EndIf
                Case $objObject.Path_.Class () = "__InstanceDeletionEvent"
                Case Else 
        EndSelect
    EndIf
EndFunc

AutoIt 3.3.14.2 X86 - SciTE 3.6.0WIN 8.1 X64 - Other Example Scripts

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...