Jump to content
Belini

Código para pegar o serial de Hd's e pendrives.

Recommended Posts

Recentemente postei uma maneira que conheço para pegar o serial do HD, funciona perfeitamente só que depende de ter os arquivos GMiControl.ocx e GMiControl.oca no Hd onde o serial será lido, alguém conhece uma maneira de ler o serial sem precisar de arquivos externos?

 

Tópico com exemplo do método que falei: http://autoitbrasil.com/index.php?/topic/271-fazer-protecao-pelo-serial-do-hd/

Share this post


Link to post
Share on other sites

Tente esse então...

 

#include<array.au3>

dim $aSerial = _getPhysicalMediaSerial()

_ArrayDisplay($aSerial)
MsgBox(0,"BIOS","O serial da bios é "&getSerialBIOS())


Func _getPhysicalMediaSerial()
;by joelson0007
Local $aArray[1]
$aArray[0] = "Serial"
$objWMIService = ObjGet("winmgmts:\\" & @ComputerName &"\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_PhysicalMedia", "WQL", 0x10 + 0x20)
If IsObj($colItems) Then
       For $objItem In $colItems
        if $objItem.SerialNumber <> "" Then
_ArrayAdd($aArray,$objItem.SerialNumber)
EndIf
       Next
EndIf
Return $aArray
EndFunc



;=========================== SERIAL BIOS

Func getSerialBIOS()
;by joelson0007
$objWMIService = ObjGet("winmgmts:\\" &@ComputerName & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_BIOS", "WQL", 0x10 + 0x20)
If IsObj($colItems) Then
       For $objItem In $colItems
        Return $objItem.SerialNumber
        ExitLoop
       Next
   EndIf
EndFunc

 

  • Like 1

Share this post


Link to post
Share on other sites

@joelson0007

 

Olá, aqui funcionou redondo, conferi com o número impresso e bateu certinho!

Que tal transformar em uma UDF? Ficaria show de bola...

Sei que dá pra fazer também com as APIs do Windows, o problema é que ainda não consegui! :(

 

Abraços,

 

João Carlos.

Share this post


Link to post
Share on other sites

Por coincidência postaram no fórum americano sobre o mesmo assunto e um script que o spudw2k parece que pega um número físico também apesar de ser diferente do que foi mostrado neste e no outro script, link do tópico: http://www.autoitscript.com/forum/topic/83895-getting-usb-unique-id/page__view__findpost__p__600948

 

@Joelson0007 o resultado foi este:

Teste.jpg

Share this post


Link to post
Share on other sites

o script do spudw2k é só para pegar identidade do dispositivo

 

se quiser tentar recriar o repositório tente essa dica da microsoft

 

digite cmd

 

Rundll32 wbemupgd, upgraderepository

Share this post


Link to post
Share on other sites

E esta identidade também é única para cada dispositivo?

 

Digitei este último que postou e deu isto:

---------------------------

RUNDLL

---------------------------

Erro em wbemupgd

Está faltando a entrada:upgraderepository

---------------------------

OK

---------------------------

Share this post


Link to post
Share on other sites

é @belini parece que o problema desse pc ta bem complicado vou recomendar que voce leia essa documentação da microsoft, deve ter a solução ai se não tiver acho que realmente não sei o que está acontecendo...

 

O WMI não está funcionando!

 

sobre a identidade plug and play é unica sim, é uma combinação de identidade do fabricante com identidade do dispositivo...

Share this post


Link to post
Share on other sites

O script do spudw2k retorna o número do Hd também, acha que posso usá-lo ao invés de usar este que pega o serial ou seria melhor o número de serial mesmo?

 

Quanto ao outro PC ele retorna o número corretamente se usar aquele outro que eu postei.

Share this post


Link to post
Share on other sites

@belini, mais voce está falando que o script do spudw2k está retornando um numero?

 

se estiver retornando então acho que não é o WMI bugado.

 

o que a macro @ComputerName retorna neste pc

Share this post


Link to post
Share on other sites

@joelson0007

 

Creio que o windows do @Belini esteja "capado", segundo ele mesmo me falou outro dia, então talvez o WMI esteja desinstalado!

Se realmente for isso, não adianta tentar usar certas funções e/ou APIs com o SO lite...

 

Abraços,

 

João Carlos.

Share this post


Link to post
Share on other sites

@Joelson0007 retorna HOME e ele mostra o serial com aquele que eu postei e com o script do spudw2k.

 

@Jscript não acho que seja isto pois só tirei dele coisas que realmente não uso tipo calculadora, jogos e outras coisas desnecessárias mais em arquivos do sistema e em serviços não mexí.

Share this post


Link to post
Share on other sites

o tempo ta ficando curto pra todo mundo, é uma correria só...

 

@belini fiz esse aqui meio que na correria teste ai e me retorne

 

#include<array.au3>
dim $aSerialPen = _getSerialPen()

_ArrayDisplay($aSerialPen)

Func _getSerialPen()
Local $aArray[1]
$aArray[0] = "Serial PEN"
$objWMIService = ObjGet("winmgmts:{impersonationLevel=Impersonate}!\\.\root\cimv2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive", "WQL", 0x10 + 0x20)
For  $objitem In $colitems
if $objitem.interfacetype = "USB" then
$objitem.pnpdeviceid
$aRegExSer=StringRegExp($objitem.pnpdeviceid,"\x5C([0-9a-fxA-FX]+)&",3) ;pega o numero hexadecimal da plug and play
if IsArray($aArray) Then
_ArrayAdd($aArray,$aRegExSer[0])
EndIf
EndIf
Next
Return $aArray
EndFunc

 

  • Like 1

Share this post


Link to post
Share on other sites

Funcionou certinho e foi no windows daquele HD que não retornou o serial, teria como juntar este e o outro prá ler tanto o serial de um HD como o de um pendrive podendo escolher de qual disco será feita a leitura do serial?

Share this post


Link to post
Share on other sites

@belini tenho um aqui que o brbranco postou no outro forum

 

 

;************************************************************
;Autoit V3
;Autor brbranco
;Data 22/07/2008
;objetivo: funções e constantes usados pela maioria dos scripts
;************************************************************
Const $JOYID1 = 0
Const $JOYID2 = 1
Const $JOYNOERROR = 0 ;qualquer erro reportado é diferente de zero

;flags para os 3 modos possiveis
Const $FLAG_BLOQUEADO = 0x0010
Const $FLAG_ARCADETEMPO = 0x0020
Const $FLAG_MODOLIVRE = 0x0040

Global $JOY_CENTRO = 0 ;0x8c9c ;exemplo 0x7fff
$JOY_CENTRO = Ver_Centro_Joy()

;************************************************************************************************************
;                               Funções exportadas para todos os scripts                                    *
;************************************************************************************************************
Func Ver_Centro_Joy()
Local $ret_ini_joy = ""
$ret_ini_joy = IniRead(@ScriptDir & "\advmenu.ini","joystick","centro","0")
Return Number($ret_ini_joy)
EndFunc

;proteção contra clonagem
Func Protecao_Usb()
Local $unidade="", $sn[1024], $i, $invertido = 0, $texto = "", $file, $comparacao = 0, $inicio=0
local $strComputer = ".", $disco="", $objWMIService, $colItems, $objItem, $tamanho

;verifica se o pendriver esta conectado
For $i=Asc("D") To Asc("Z")
    If FileExists(chr($i) & ":\multijogos.bin") == 1 Then
        $unidade = chr($i) & ":\multijogos.bin"
        ExitLoop
    EndIf
Next
If $unidade == "" Then Return $comparacao

;abre o arquivo
$file=FileOpen($unidade, 16)
If $file == -1 Then
    Return $comparacao
EndIf

;lê todo o arquivo para o array
For $i= 0 to UBound($sn)-1
    $sn[$i]=FileRead($file,1)
    If @error = -1 Then ExitLoop
Next
FileClose($file)

;pega o byte de inicio offset
$inicio=Asc(chr($sn[1]))
;pega o byte de tamanho
$tamanho=Asc(chr($sn[2]))

;decripta os dados
For $i=$inicio To ($inicio + $tamanho)
    $invertido = BitXOR($sn[$i], $sn[0])
    $texto &= chr($invertido)
Next

;chama o wmi e faz a comparação
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\cimv2")
$colItems = $objWMIService.execquery("Select * from Win32_DiskDrive")
For $objItem in $colItems
    $disco=$objItem.PNPDeviceID
    If StringInStr($disco, "USBSTOR") Then
        If StringCompare($disco, $texto) == 0 Then
            $comparacao = 1
            ExitLoop
        EndIf
    EndIf
Next
Return $comparacao
EndFunc

;modifica o ponteiro do mouse
Func MudaCursor($tipo_ponteiro = 0)
Local Const $OCR_NORMAL = 32512
Local $Hcursor = 0, $cursor = ""
Switch $tipo_ponteiro
    Case 1
        $cursor = RetPastaImagem() & "\invisivel.cur"
    Case 2
        $cursor = RetPastaImagem() & "\animado.ani"
    Case Else
        $cursor = RetPastaImagem() & "\normal.cur"
EndSwitch
$Hcursor = DllCall("user32.dll","int","LoadCursorFromFileA", "str", $cursor)
If Not @error Then
    DllCall("user32.dll","int","SetSystemCursor", "int", $Hcursor[0], "int", $OCR_NORMAL)
EndIf
MouseMove( @DesktopWidth + 100, @DesktopHeight+100,0)
EndFunc

;retorna o path para o advmenu.ini
Func RetAdvMenuIni()
Local $ret_str_ini = ""
$ret_str_ini = StringLeft(@ScriptDir,2) & "D:\arcade\advmenu.ini"
Return $ret_str_ini
EndFunc

;retorna o path para a pasta de som
Func RetPastaSom()
Local $ret_str_ini = ""
$ret_str_ini = StringLeft(@ScriptDir,2) & "D:\arcade\auxiliar\som"
Return $ret_str_ini
EndFunc

;retorna o path para a pasta de som
Func RetPastaImagem()
Local $ret_str_ini = ""
$ret_str_ini = StringLeft(@ScriptDir,2) & "D:\arcade\auxiliar\image"
Return $ret_str_ini
EndFunc

;retorna o path para a pasta do joytokey
Func RetPastaJoyToKey()
Local $ret_str_ini = ""
$ret_str_ini = StringLeft(@ScriptDir,2) & "D:\arcade\joytokey"
Return $ret_str_ini
EndFunc

;retorna o path para a pasta do advmenu.rc
Func RetAdvMenuRc()
Local $ret_str_ini = ""
$ret_str_ini = StringLeft(@ScriptDir,2) & "D:\arcade\advmenu.rc"
Return $ret_str_ini
EndFunc

 

Edited by JScript
Adicionada as tags [Spoiler ]

Share this post


Link to post
Share on other sites

@amaral bem vindo ao fórum, Sempre que postar um código que não seja seu procure colocar o máximo de informações referentes a ele principalmente quem é o autor do mesmo, citando este script como exemplo:

 

Créditos para Brbranco autor deste script.

Link do tópico: Aqui você coloca o link de onde foi retirado para que possamos ter mais informações sobre o script

 

Obs: Não se esqueça também de ler as regras do fórum, elas ficam no início de todo tópico criado e são cobradas a risca neste fórum também léia sobre o uso das tag's neste tópico: http://autoitbrasil.com/index.php?/topic/379-editor-de-mensagens-uso-de-tags/page__view__findpost__p__1833

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


×