Author Topic: HD Serial number  (Read 3065 times)

0 Members and 1 Guest are viewing this topic.

Marc'Antonio Alessi

  • Swamp Rat
  • Posts: 1453
  • Marco
HD Serial number
« on: February 03, 2023, 02:55:15 AM »


I'm looking for a function that gives the same result as dos_serialno, the functions I report below (sorry if I didn't report all the credits)
[/size]get three different results...
[/size]"BCA30E72" -1130164622 "50026B775203E442"

Code: [Select]

(dos_serialno "C:")            => "BCA30E72"
(#Asmi_Get_Drive_Serial "c:") => -1130164622
(UsbDriveSerialNumber) => ((("C:" -1130164622) ("G:" 428019990) ("H:" 943522054) ("Z:" -693829664)) nil)
(VxGetDriveInfos "C:") => (2.15739e+008 4.28575e+007 2 "NTFS" -1130164622 "" "OS")
(gthardware:generateid) => ("-1130164622" "ASUS01" "User1")
(HDSerial)             => "50026B775203E442"




Code: [Select]
; drive type 1 is a usb 2 hard disk
(defun UsbDriveSerialNumber ( / fso HrdDsk UsbDsk)
  (setq fso (vlax-create-object "Scripting.FileSystemObject"))
  (vlax-for d (vlax-get fso 'Drives)
    (cond
      ( (= (Vlax-get d 'DriveType) 1)
        (setq UsbDsk (cons (list (vla-get-path d) (vla-get-SerialNumber d)) UsbDsk))
      )
      ( (= (Vlax-get d 'DriveType) 2)
        (setq HrdDsk (cons (list (vla-get-path d) (vla-get-SerialNumber d)) HrdDsk))
      )
    ; ( T (print d) )
    )
  )
  (vlax-release-object fso)
  (list (reverse HrdDsk) (reverse UsbDsk))
)
;;; PART OF 'ASMILIB' LIBRUARY  *
;;; Created: 07.10.2007          *
;;; Last modyfied: 07.10.2007    *
;;; © Alexanders Smirnovs (ASMI) *
(defun #Asmi_Get_Drive_Serial(Path / fsObj hSn abPth cDrv)
 (vl-load-com)
 (if
   (and
     (setq fsObj(vlax-create-object "Scripting.FileSystemObject"))
     (not
(vl-catch-all-error-p
  (setq abPth(vl-catch-all-apply 'vlax-invoke-method
       (list fsObj 'GetAbsolutePathName Path))
       ); end setq
   ); end vl-catch-all-error-p
); end not
  ); end and
   (progn
     (setq cDrv(vlax-invoke-method fsObj 'GetDrive
       (vlax-invoke-method fsObj 'GetDriveName abPth
       ); end vlax-invoke-method
     );end vlax-invoke-method
    ); end setq
    (if
      (vl-catch-all-error-p
  (setq hSn(vl-catch-all-apply 'vlax-get-property
    (list cDrv 'SerialNumber))))
    (progn
      (vlax-release-object cDrv)
      (setq hSn nil)
    ); end progn
      ); end if
   (vlax-release-object fsObj)
   ); end progn
  ); end if
 hSn
); end of #Asmi_Get_Drive_Serial


(defun HDSerial ( / wmi srv drv ser )
  (vl-catch-all-apply
    (function
      (lambda ( )
        (if
          (setq wmi (vlax-create-object "WbemScripting.SWbemLocator")
                srv (vlax-invoke wmi 'connectserver nil nil nil nil nil nil nil nil)
                drv (vlax-invoke srv 'execquery "Select SerialNumber from Win32_DiskDrive")
          )
          (vlax-for item drv
            (vlax-for prop (vlax-get item 'Properties_)
              (if (eq "SERIALNUMBER" (strcase (vlax-get prop 'name)))
                (setq ser (vl-string-trim " " (vlax-get prop 'value)))
              )
            )
          )
        )
      )
    )
  )
  (if drv (vlax-release-object drv))
  (if srv (vlax-release-object srv))
  (if wmi (vlax-release-object wmi))
  ser
)


(DEFUN gthardware:generateid (/ filesystemobject drives n serial wscript pcname pcuser)
  (SETQ serial 0
                pcname ""
                pcuser ""
  )
  (COND ((SETQ wscript (VLAX-CREATE-OBJECT "WScript.Network"))
                 (SETQ pcname (VLAX-GET-PROPERTY wscript "ComputerName") ; Computer Name
                           pcuser (VLAX-GET-PROPERTY wscript "UserName") ; UserName
                 )
                 (VLAX-RELEASE-OBJECT wscript)
                 ;; Obtain the first Hard drive serial number
                 (COND ((SETQ filesystemobject (VLAX-CREATE-OBJECT "Scripting.FilesystemObject"))
                                ;; access the Drives collection
                                (SETQ drives (VLAX-GET-PROPERTY filesystemobject 'drives))
                                ;; Check each drive for a fixed drive. When the first drive is found, exit.
                                (VL-CATCH-ALL-APPLY
                                  '(LAMBDA ()
                                         (VLAX-FOR n drives
                                           ;;If there drive is a fixed drive, get the serial and exit
                                           (IF (= (VLAX-GET-PROPERTY n 'drivetype) 2)
                                                 (PROGN
                                                   (SETQ serial (VLAX-GET-PROPERTY n 'serialnumber))
                                                   (EXIT)
                                                 )
                                           )
                                         )
                                   )
                                )
                                ;; Release the vla objects
                                (VLAX-RELEASE-OBJECT drives)
                                (VLAX-RELEASE-OBJECT filesystemobject)
                           )
                 )
                )
  )
  (list (ITOA serial) pcname pcuser)
)


; Copyright: ©2001 MENZI ENGINEERING GmbH, Switzerland
;
(defun VxGetDriveInfos (Drv / DrvObj FilSys RetVal)
 (vl-load-com)
 (setq FilSys (vlax-create-object "Scripting.FileSystemObject")
       RetVal (cond
               ((= (vlax-invoke FilSys 'DriveExists Drv) 0) 0)
               ((setq DrvObj (vlax-invoke FilSys 'GetDrive Drv))
                (cond
                 ((= (vlax-get DrvObj 'IsReady) 0) -1)
                 ((list
                   (/ (vlax-get DrvObj 'TotalSize) 1000.0)
                   (/ (vlax-get DrvObj 'FreeSpace) 1000.0)
                   (vlax-get DrvObj 'DriveType)
                   (vlax-get DrvObj 'FileSystem)
                   (vlax-get DrvObj 'SerialNumber)
                   (vlax-get DrvObj 'ShareName)
                   (vlax-get DrvObj 'VolumeName)
                  )
                 )
                )
               )
              )
 )
 (if DrvObj (vlax-release-object DrvObj))
 (vlax-release-object FilSys)
 RetVal
)

d2010

  • Bull Frog
  • Posts: 326
Re: HD Serial number
« Reply #1 on: February 03, 2023, 05:12:48 AM »
Why you need, the serial number  of-HDD?
You, do insert more crashes inside  AutoCad?   
Perhaps you block the programs.fas, forced to operating system win11?

 :thinking:
« Last Edit: February 03, 2023, 06:09:26 AM by d2010 »

VovKa

  • Water Moccasin
  • Posts: 1631
  • Ukraine
Re: HD Serial number
« Reply #2 on: February 03, 2023, 05:27:17 AM »
works on win7
not sure about others
Code: [Select]
(defun vk_GetWbem (NameSpace Class Props / LocatorObj ServiceObj ObjectSetObj OutList)
  (and (setq LocatorObj (vlax-create-object "WbemScripting.SWbemLocator"))
       (setq ServiceObj (vlax-invoke-method LocatorObj 'ConnectServer "." NameSpace nil nil nil nil nil nil))
       (setq ObjectSetObj (vlax-invoke-method ServiceObj 'ExecQuery (strcat "SELECT * FROM " Class) nil nil nil))
       (vlax-for Obj ObjectSetObj
(setq OutList (cons (mapcar (function (lambda (p) (cons p (vlax-get Obj p)))) Props)
     OutList
       )
)
       )
  )
  (vk_ReleaseObjects (list ObjectSetObj ServiceObj LocatorObj))
  (reverse OutList)
)
(defun vk_GetHDDID (/)
  (mapcar 'list
  (mapcar 'cdar (vk_GetWbem "root\\cimv2" "Win32_DiskDrive" (list "Model")))
  (mapcar 'cdar (vk_GetWbem "root\\cimv2" "Win32_PhysicalMedia" (list "SerialNumber")))
  )
)

Marc'Antonio Alessi

  • Swamp Rat
  • Posts: 1453
  • Marco
Re: HD Serial number
« Reply #3 on: February 03, 2023, 05:39:43 AM »
works on win7
not sure about others
Code: [Select]
...
Code: [Select]
Thanks VovKa :
; errore: no function definition: VK_RELEASEOBJECTS

VovKa

  • Water Moccasin
  • Posts: 1631
  • Ukraine
Re: HD Serial number
« Reply #4 on: February 03, 2023, 05:53:40 AM »
Code: [Select]
Thanks VovKa :
; errore: no function definition: VK_RELEASEOBJECTS
nothing special, just substitute it with (mapcar 'vlax-release-object ... )

Marc'Antonio Alessi

  • Swamp Rat
  • Posts: 1453
  • Marco
Re: HD Serial number
« Reply #5 on: February 03, 2023, 11:03:48 AM »
Code: [Select]
Thanks VovKa :
; errore: no function definition: VK_RELEASEOBJECTS
nothing special, just substitute it with (mapcar 'vlax-release-object ... )
Thanks again,
(vk_GetHDDID) => (("RSH USB Device" "00A123456789    ") ("KINGSTON SV300S37A240G" "50026B775203E442"))

sorry again for my ignorance but with
(dos_serialno "C:")      => "BCA30E72"
why do I have a different result?

VovKa

  • Water Moccasin
  • Posts: 1631
  • Ukraine
Re: HD Serial number
« Reply #6 on: February 03, 2023, 01:38:04 PM »
why do I have a different result?
as i mentioned earlier, my code works on win7. that's the operating system i'm using
i removed my pc's cover and checked the returned serial against hdd's sticker, they match

and i've also found a comment in my lisp file concerning this function
;;;Win XP/2003 only, no SATA
so it's windows version dependent

It's Alive!

  • Retired
  • Needs a day job
  • Posts: 8702
  • AKA Daniel
Re: HD Serial number
« Reply #7 on: February 03, 2023, 03:19:10 PM »
are you looking for the volume label? XXXX-XXXX

"Select VolumeSerialNumber from Win32_LogicalDisk"
« Last Edit: February 03, 2023, 03:34:05 PM by beck's bolero »

BIGAL

  • Swamp Rat
  • Posts: 1414
  • 40 + years of using Autocad
Re: HD Serial number
« Reply #8 on: February 04, 2023, 01:43:17 AM »
A man who never made a mistake never made anything

It's Alive!

  • Retired
  • Needs a day job
  • Posts: 8702
  • AKA Daniel
Re: HD Serial number
« Reply #9 on: February 04, 2023, 02:23:32 AM »
(dos_serialno "C:")   used to return the volume serial
if you go to the command prompt c:\, type dir,  you should see it at the top
this serial changes when you format the volume, this is not to be confused with a hardware serial number

Marc'Antonio Alessi

  • Swamp Rat
  • Posts: 1453
  • Marco
Re: HD Serial number
« Reply #10 on: February 04, 2023, 03:45:28 AM »
... i removed my pc's cover and checked the returned serial against hdd's sticker, they match ...
Grazie..., thanks for your time.  :)

Marc'Antonio Alessi

  • Swamp Rat
  • Posts: 1453
  • Marco
Re: HD Serial number
« Reply #11 on: February 04, 2023, 03:49:40 AM »
I have modified the function HDSerial posted:
Code: [Select]
(defun ALE__Files_VolSerialLogNo ( / wmi srv drv ser)
  (vl-catch-all-apply
    (function
      (lambda ( )
        (if
          (setq wmi (vlax-create-object "WbemScripting.SWbemLocator")
                srv (vlax-invoke wmi 'connectserver nil nil nil nil nil nil nil nil)
                drv (vlax-invoke srv 'execquery "Select VolumeSerialNumber from Win32_LogicalDisk")
          )
          (vlax-for item drv
            (vlax-for prop (vlax-get item 'Properties_)
              (if (eq "VOLUMESERIALNUMBER" (strcase (vlax-get prop 'name)))
                (setq ser (vl-string-trim " " (vlax-get prop 'value)))
              )
            )
          )
        )
      )
    )
  )
  (foreach obj (list drv srv wmi) (and obj (vlax-release-object obj)))
  ser
)
(ALE__Files_VolSerialLogNo) => "BCA30E72"
(dos_serialno "C:")             => "BCA30E72"
Thanks Daniel and BIGAL  :)

kdub_nz

  • Mesozoic keyThumper
  • SuperMod
  • Water Moccasin
  • Posts: 2139
  • class keyThumper<T>:ILazy<T>
Re: HD Serial number
« Reply #12 on: February 04, 2023, 04:18:20 AM »
 user beware !
 perhaps, or perhaps not :


Called Kerry in my other life
Retired; but they dragged me back in !

I live at UTC + 13.00

---
some people complain about loading the dishwasher.
Sometimes the question is more important than the answer.

Marc'Antonio Alessi

  • Swamp Rat
  • Posts: 1453
  • Marco
Re: HD Serial number
« Reply #13 on: February 04, 2023, 04:21:58 AM »
New version...
Code: [Select]
(defun ALE_Files_VolSerialLogNos ( / wmi srv drv ser did vsn prp)
  (vl-catch-all-apply
    (function
      (lambda ( )
        (if
          (setq wmi (vlax-create-object "WbemScripting.SWbemLocator")
                srv (vlax-invoke wmi 'connectserver nil nil nil nil nil nil nil nil)
                drv (vlax-invoke srv 'execquery "Select VolumeSerialNumber from Win32_LogicalDisk")
          )
          (vlax-for item drv
            (vlax-for prop (vlax-get item 'Properties_)
              (setq prp (strcase (vlax-get prop 'name)))
              (cond
                ( (eq "DEVICEID"           prp) (setq did (vlax-get prop 'value)) )
                ( (eq "VOLUMESERIALNUMBER" prp) (setq vsn (vlax-get prop 'value)) )
              )
            ); (print prp) (princ "  ")  (prin1 did) (princ "  ")  (prin1 vsn)
            (and did vsn (setq ser (cons (cons did vsn) ser)))
          )
        )
      )
    )
  )
  (foreach obj (list drv srv wmi) (and obj (vlax-release-object obj)))
  ser
)
(ALE_Files_VolSerialLogNos) => (("Z:" . "D6A4FFE0") ("H:" . "383D0106") ("G:" . "19831116") ("C:" . "BCA30E72"))

kdub_nz

  • Mesozoic keyThumper
  • SuperMod
  • Water Moccasin
  • Posts: 2139
  • class keyThumper<T>:ILazy<T>
Re: HD Serial number
« Reply #14 on: February 04, 2023, 04:23:49 AM »
User beware !
Perhaps or perhaps not :
Called Kerry in my other life
Retired; but they dragged me back in !

I live at UTC + 13.00

---
some people complain about loading the dishwasher.
Sometimes the question is more important than the answer.