Obtener el nro de serie del disco

285 views
Skip to first unread message

PETACA

unread,
Nov 19, 2012, 2:36:05 PM11/19/12
to publice...@googlegroups.com
Hola a todos. Alguien sabe como obtener el nro de serie del disco donde tengo instalado mi sistema y asi poder protegerlo
Saludos y gracias

Francisco Javier zárate

unread,
Nov 19, 2012, 2:48:00 PM11/19/12
to publice...@googlegroups.com

Yo te recomiendo más que uses el CPU ID ya que el disco se puede cambiar por  x motivo aqui esta el codigo que tengo



?GetVolumeSerial("C")

FUNCTION GetVolumeSerial(tcDrive)
    IF PCOUNT() = 0
        tcDrive = "C:\"
    ELSE
        tcDrive = STRTRAN(tcDrive, ":\", "") + ":\"
    ENDIF
    LOCAL lcName, lcFSName, lnVolumeSerial, ;
        lnFMaxLen, lnFSFlags, ;
        lcVolumeSerial, lnNameLen, lnFSNameLen

    STORE SPACE(255) TO lcName, lcFSName
    STORE 0 TO lnVolumeSerial, lnFMaxLen, lnFSFlags
    STORE 255 TO lnNameLen, lnFSNameLen

    DECLARE GetVolumeInformation IN win32api STRING, STRING @, ;
        INTEGER, INTEGER @, INTEGER @, INTEGER @, STRING @, INTEGER

    =GetVolumeInformation(tcDrive, @lcName, lnNameLen, ;
        @lnVolumeSerial, @lnFMaxLen, @lnFSFlags, @lcFSName, lnFSNameLen)
        
    CLEAR DLLS GetVolumeInformation
    
    IF EMPTY(lnVolumeSerial)
        RETURN ""
    ELSE
        IF lnVolumeSerial < 0
            lnVolumeSerial = 4294967296 + lnVolumeSerial
        ENDIF
        lcVolumeSerial = SUBSTR(TRANSFORM(lnVolumeSerial,"@0"), 3)
        RETURN lcVolumeSerial
    ENDIF
ENDFUNC

?GetMACAddress()

FUNCTION GetMACAddress()
lcFile = ADDBS(SYS(2023)) + "_"+SUBSTR(SYS(2015), 4)  + ".tmp"
lcCommand = "ipconfig /all >" + lcFile
DECLARE INTEGER WinExec IN win32api ;
   STRING command, INTEGER param
=WinExec(SYS(2004) + "FOXRUN.PIF /C " + lcCommand, 0)
CLEAR DLLS WinExec
*!* This next line may not be necessary on all computers...included JIC
=INKEY(1, "H") &&Slow VFP down so windows can make the file first
IF FILE(lcFile)
    lcOutput = FILETOSTR(lcFile)
    ERASE (lcFile)
ELSE
    RETURN "" &&Couldn't create file
ENDIF

lnAt = AT('Physical Address. . . . . . . . . : ', lcOutput)
IF lnAt > 0
    lcMAC = UPPER(STRTRAN(SUBSTR(lcOutput, lnAt + 36 , 17), '-','))
ENDIF

RETURN lcMAC
Slighthaze = NULL

Nilton CPM

unread,
Nov 19, 2012, 2:51:53 PM11/19/12
to publice...@googlegroups.com
Function SerialHD
    Parameters Unidade
 
    If Empty(Unidade)
        Unidade = 'C'
    Endif
 
    declara()        && Declare ...
 
    Local m.buflen, m.buf
    m.buflen     = 104
    m.buf         = Replicate(Chr(0), m.buflen)
    m.str1         = "C"
    m.vnb         = Replicate(Chr(0),64)
    m.vnbs         = 64
    m.vsn         = 0
    m.mcl         = 0
    m.fsf         = 0
    m.fsnb         = Replicate(Chr(0),10)
    m.fsnbs     = 10
 
    GetVolumeInformation(m.str1 + ":\", @m.vnb, m.vnbs,@m.vsn, @m.mcl, @m.fsf, @m.fsnb, m.fsnbs)
    If m.vsn < 0
        m.vsn = m.vsn + 168
    Endif
    m.vsn = Padl(Alltrim(Substr(Transform(m.vsn,"@0"), 3)), 8, "0")
    m.drivenumber = Asc(m.str1) - Asc("C")
    handle = CreateFile("\\.\" + Chr(Asc("c") + m.drivenumber) + ":",0xC0000000, 3, 0, 3, 0, 0)
    m.sn = ""
    m.mod = ""
    m.rev = ""
    If handle <> -1
        m.sci =""
        m.sci = m.sci + Chr(0) + Chr(2) + Chr(0) + Chr(0)
        m.sci = m.sci + Chr(0)
        m.sci = m.sci + Chr(1)
        m.sci = m.sci + Chr(1)
        m.sci = m.sci + Chr(0)
        m.sci = m.sci + Chr(0)
        m.sci = m.sci + Chr(0xA0)
        m.sci = m.sci + Chr(0xEC)
        m.sci = m.sci + Chr(0)
        m.sci = m.sci + Chr(0)
        m.sci = m.sci + Replicate(Chr(0), 499)
        m.sco = Replicate(Chr(0), 2048)
        m.ret_buffersize = 0
        m.otv=DeviceIoControl( handle,;
            0x7C088,;
            @m.sci,;
            LEN(sci),;
            @m.sco,;
            LEN(sco),;
            @m.ret_buffersize,;
            0;
            )
        CloseHandle(handle)
        If m.otv <> 0
            m.sn = Chrtran( Alltrim( conv21( Substr(m.sco, 37, 20) ) ),Chr(0), "")
            m.rev = Chrtran( Alltrim( conv21( Substr(m.sco, 63, 8) ) ),Chr(0), "")
            m.mod = Chrtran( Alltrim( conv21( Substr(m.sco, 71, 40) ) ),Chr(0), "")
        Endif
    Endif
    If Empty(m.sn)
        handle = CreateFile("\\.\" + Chr(Asc("c") + m.drivenumber) +":", 0x00000000, 3,0, 3, 0, 0)
        If handle <> -1
            m.sn = ""
            m.mod = ""
            m.rev = ""
            m.sci = Replicate(Chr(0),1024)
            m.sco = Replicate(Chr(0),1024)
            m.ret_buffersize = 0
            m.otv = DeviceIoControl( handle,;
                0x2D1400,;
                @m.sci,;
                LEN(sci),;
                @m.sco,;
                LEN(sco),;
                @m.ret_buffersize,;
                0;
                )
            CloseHandle(handle)
            If m.otv <> 0
                m.pos0 = Asc(Substr(m.sco,13,1))
                m.pos1 = Asc(Substr(m.sco,17,1))
                If m.pos0 > 0
                    m.pos1 = m.pos0
                Endif
                m.pos2 = Asc(Substr(m.sco, 21, 1))
                m.pos3 = Asc(Substr(m.sco, 25, 1))
                m.mod = Substr(m.sco, m.pos1+1, m.pos2 - m.pos1)
                m.pos4 = At(Chr(0), m.mod)
                If m.pos4 > 0
                    m.mod = Alltrim(Chrtran(m.mod, Chr(0), ""))
                Endif
                If m.pos3 > m.pos2
                    m.rev = Substr(m.sco, m.pos2+1, m.pos3 - m.pos2)
                Else
                    m.rev = Substr(m.sco, m.pos2+1)
                Endif
                m.pos4 = At(Chr(0), m.rev)
                If m.pos4 > 0
                    m.rev = Alltrim(Left(m.rev, m.pos4 - 1))
                Endif
 
 
                m.sn = ""
                *!*                    If m.pos3 > 0
                *!*                        m.pos3 = m.pos3 + 1
                *!*                        m.sco1 = Substr(m.sco, m.pos3, 40)
                *!*                        m.sco1 = Alltrim(m.sco1)
                *!*                        m.sn = ""
                *!*                        m.pos3 = 1
                *!*
                *!*                        SET STEP ON
                *!*
                *!*                        For m.j = 1 To 20
                *!*                            m.ch1 = Chr(Evaluate("0x" + Alltrim(Substr(m.sco1, m.pos3, 2))))
                *!*                            m.pos3 = m.pos3 + 2
                *!*                            m.ch2 = Chr(Evaluate("0x" + Alltrim(Substr(m.sco1, m.pos3, 2))))
                *!*                            m.pos3 = m.pos3 + 2
                *!*                            m.sn = m.sn + m.ch2 + m.ch1
                *!*                        Endfor
                *!*                        m.sn = Alltrim(Chrtran(m.sn, Chr(0), ""))
                *!*                    Else
                *!*                        m.sn = ""
                *!*                    Endif
            Endif
        Endif
    Endif
 
    Serial = m.mod + m.rev + m.sn
    Clear Dlls CloseHandle, CreateFile, DeviceIoControl, GetLogicalDriveStrings, GetDriveType, GetVolumeInformation
    Return Serial
 
Function conv21
    Lparameters m.str
    If Len(m.str)%2 = 1
        m.str = m.str + " "
    Endif
 
    Local m.i, m.str2
    m.str2 = ""
 
    For m.i=1 To Len(m.str)
        m.str2 = m.str2 + Substr(m.str, m.i + Iif(m.i%2=0, -1, 1), 1)
    Endfor
    Return m.str2
 
Function declara
    Declare Integer CloseHandle In kernel32 ;
        INTEGER hObject
 
    Declare Integer CreateFile In kernel32 ;
        STRING lpFileName,;
        INTEGER dwDesiredAccess,;
        INTEGER dwShareMode,;
        INTEGER lpSecurityAttributes,;
        INTEGER dwCreationDisposition,;
        INTEGER dwFlagsAndAttributes,;
        INTEGER hTemplateFile
 
    Declare Integer DeviceIoControl In kernel32 ;
        INTEGER hDevice,;
        INTEGER dwIoControlCode,;
        STRING @lpInBuffer,;
        LONG nInBufferSize,;
        STRING @lpOutBuffer,;
        LONG nOutBufferSize,;
        INTEGER @lpBytesReturned,;
        INTEGER lpOverlapped
 
    Declare Integer GetLogicalDriveStrings In Win32API ;
        INTEGER buflen,;
        STRING @buf
 
    Declare Integer GetDriveType In Win32API String cpath
 
    Declare Integer GetVolumeInformation In Win32API ;
        STRING lpRootPathName,;
        STRING @lpVolumeNameBuffer,;
        INTEGER nVolumeNameSize,;
        LONG @lpVolumeSerialNumber,;
        INTEGER @lpMaximumComponentLength,;
        INTEGER @lpFileSystemFlags,;
        STRING @lpFileSystemNameBuffer,;
        INTEGER nFileSystemNameSize
    Return

 

 

 

Um Abraço...

 

#===============

| Nilton Cesar Puglia Menaré

| Celular: (53) 8106-5110

| Email/Msn: Nilto...@hotmail.com

#====================

--
 
 
 

Solari Fabian Francisco

unread,
Nov 19, 2012, 4:00:34 PM11/19/12
to publice...@googlegroups.com

Ok gracias. Hay alguna manera de leer el nro de serie el microprocesador ?

--
 
 
 

Walter R. Ojeda Valiente

unread,
Nov 19, 2012, 5:39:46 PM11/19/12
to publice...@googlegroups.com
Si usas el identificador de la CPU perderás dinero:
- Podrán formatear tu disco duro y reinstalar tu sistema y no cobrarás un centavo por eso.

Si usas el número de serie del disco duro:
- Si formatean el disco duro deberán llamarte para que tu sistema siga funcionando, y cobrarás por eso.

Saludos.

Walter.

"Si puedes razonar con gente religiosa, no son gente religiosa". Dr. House




Date: Mon, 19 Nov 2012 11:48:00 -0800
From: javi...@gmail.com
To: publice...@googlegroups.com
Subject: [vfp] Re: Obtener el nro de serie del disco
--
 
 
 

sixtored

unread,
Nov 19, 2012, 8:44:29 PM11/19/12
to publice...@googlegroups.com
Yo utilizo DiskSerial aqui te paso el link..

Saludos.-
Message has been deleted

Hitiel Hernández

unread,
May 25, 2020, 1:57:31 PM5/25/20
to publice...@googlegroups.com
Yo utilizo éste código en el PRG de mis funciones:

*****************************
FUNCTION seriedisco()   &&&& RETORNA EL NUMERO DE SERIE DEL DISCO POR DEFAULT
!* Retorna numero de serie del disco, para controlar licencias de uso del sistema
*****************************
#DEFINE MAX_FILENAME_LEN 256
LOCAL ser,i,j,s,s2
DECLARE integer GetVolumeInformation in Win32API;
string lpRootPathName,;
string lpVolumeNameBuffer,;
integer nVolumeNameSize,;
integer @lpVolumeSerialNumber,;
integer @lpMaximumComponentLength,;
integer @lpFileSystemFlags,;
string lpFileSystemNameBuffer ,;
integer nFileSystemNameSize

STORE 0 to ser,i,j
STORE space(128) to s,s2
*DRIVE='C:\'
DRIVE = _dunidad+":\"

x=GetVolumeInformation(drive,s,MAX_FILENAME_LEN,@ser,@i,@j,s2,MAX_FILENAME_LEN)
ser=alltrim(str(ser))
RETURN ser
ENDFUNC


Libre de virus. www.avast.com

El lun., 25 may. 2020 a las 5:13, Finance Ivanova Laleva Maria (<finance...@gmail.com>) escribió:
Ivanova-Finance le ofrece su préstamo en línea: préstamo comercial, préstamo de automóvil, crédito rotativo o préstamo personal. ¡Estos refuerzos financieros son lo que necesita para implementar todos sus proyectos! Ya sea su boda, cambiar de automóvil, cambiar de equipo, renovar su hogar o simplemente lo inesperado, Ivanova-Finance está allí para ayudarlo. La ventaja de Ivanova-Finance es la implementación de una solución de reembolso desde 2015, dependiendo de su posibilidad de la actividad en la que desea invertir.

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/8b800c4d-33cc-4db4-b02b-7acd0fa88438%40googlegroups.com.


--
*-- Saludos Cordiales 

Marcelo Barberis

unread,
May 25, 2020, 4:07:26 PM5/25/20
to publicesvfoxpro
Hola buenas tardes

*****************************
FUNCTION seriedisco()   &&&& RETORNA EL NUMERO DE SERIE DEL DISCO POR DEFAULT
!* Retorna numero de serie del disco, para controlar licencias de uso del sistema
*****************************  
este codigo que te devuelve la seriedisco, que es en realidad lo que te devuelve, el serial que asigna cuando tu formateas el disco??? o es un serial unico del DD
Ahora si tengo dos o mas particiones el nro de esta funcion es diferente para cada particion??? 
es decir si yo le paso como parametro "C:\" el nro de serie sera igual si yo le paso como parametro "D:\" o "E:\"



--
Marcelo Barberis Gutierrez
Sistemas Informaticos
Villa Montes - Bolivia
Telef.: +591-76830544

HernanCano

unread,
May 25, 2020, 8:52:37 PM5/25/20
to Comunidad de Visual Foxpro en Español
Hola, Marcelo.

>>> este codigo que te devuelve la seriedisco, que es en realidad lo que te devuelve, el serial que asigna cuando tu formateas el disco??? o es un serial unico del DD

Voy a tratar de responder: devuelve el serial del disco (si no, el colega no lo hubiera puesto).
Sí, el serial del disco, el cual es probable que cambie cuando se formatea el disco.

>>> Ahora si tengo dos o mas particiones el nro de esta funcion es diferente para cada particion??? 

Haz tus pruebas y nos cuentas si los resultados son acertados para tú.


El lunes, 25 de mayo de 2020, 15:07:26 (UTC-5), Marcelo Barberis escribió:
Hola buenas tardes
Reply all
Reply to author
Forward
0 new messages