Jump to content
Sign in to follow this  
royalmarine

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

Recommended Posts

royalmarine

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

Share this post


Link to post
Share on other sites
wakillon

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

Share this post


Link to post
Share on other sites
royalmarine

thank you wakillon, that worked perfectly!

Share this post


Link to post
Share on other sites
wakillon

thank you wakillon, that worked perfectly!

Glad to help you ! Posted Image


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

Share this post


Link to post
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
Sign in to follow this  

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.