1

Konu: Harici Disk MAC adresi

Arkadaşlar selam,

VFP 9 ile harici disk mac adresini nasıl okurum.

Saygılar.

2

Re: Harici Disk MAC adresi

MAC ifadesini harddisk ile birlikte hiç duymadım.
"Harici disk" dediğine göre: söz konusu olan harddik bir NAS'ın içindeki bir harddisk ve sen NAS'ın network kartın MAC adresinimi öğrenmek istiyorsun?

Bir projenin bitmesi için 3 seçenek vardır: hızlı, ucuz, iyi. Bu seçeneklerden iki tanesini seçiniz.

3

Re: Harici Disk MAC adresi

Yanlış ifade etmişim.. Harici diske ait üretici seri numarasını kastetmiştim.
Bir de bu numara, disk formatlandığında volume id gibi değişiyor mu ?

4

Re: Harici Disk MAC adresi

Diskin seri numarasını mı yoksa kastediyorsun ?

5 Son düzenleyen, ugurlu2001 (23.07.2014 12:31:19)

Re: Harici Disk MAC adresi

Visual Fox Pro
*!*     HDD Firmware serial number

*!*    Author: Mike Gagnon
*!*    http://www.foxite.com/archives/hdd-firmware-serial-number-0000075916.htm
 
?diskserial("c")
FUNCTION DiskSerial
 
LPARAMETER cDisk
 
DECLARE SHORT GetVolumeInformation IN Win32API ;
        STRING wroot, ;
        STRING wnombuf, ;
        LONG wnomsize, ;
        STRING wnumero, ;
        STRING wmx, ;
        STRING wflag, ;
        STRING wsysbuf, ;
        INTEGER wsyssize
 
LOCAL wroot, wnombuf, wnumero, wmx
LOCAL wflag, wsysbuf, wnomsize, wsyssize
LOCAL n1,n2,n3,n4, w1,w2,w3,w4
 
wroot = IIF(EMPTY(cDisk), SYS(5), cDisk + ':') + "\"
wnombuf = SPACE(255)
wnumero = SPACE(10)
wmx = SPACE(255)
wflag = SPACE(255)
wsysbuf = SPACE(255)
wnomsize = 255
wsyssize = 255
 
GetVolumeInformation (wroot, @wnombuf, @wnomsize, @wnumero, ;
                      @wmx, @wflag, @wsysbuf, @wsyssize)
 
n4 = ASC(SUBSTR(wnumero,1,1))
n3 = ASC(SUBSTR(wnumero,2,1))
n2 = ASC(SUBSTR(wnumero,3,1))
n1 = ASC(SUBSTR(wnumero,4,1))
w1 = TRANSFORM(n1,'@0')
w2 = TRANSFORM(n2,'@0')
w3 = TRANSFORM(n3,'@0')
w4 = TRANSFORM(n4,'@0')
 
RETURN RIGHT(w1,2) + RIGHT(w2,2) + "
-" + RIGHT(w3,2) + RIGHT(w4,2)
EndFunc
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

6

Re: Harici Disk MAC adresi

Public code from VFP Forums

Visual Fox Pro
? HDSerialNo() 

 
FUNCTION HDSerialNo
xWMI = getobject("winmgmts:")
xDisks = xWMI.InstancesOf("Win32_PhysicalMedia")
    for each xDisk in xDisks
         HDSerialNo=xDisk.SerialNumber && The first HD in your computer
        exit
    NEXT
 
   HDSerialNo=ALLTRIM(HDSerialNo)  && The first HD in your computer
    ? HDSerialNo
 
    IF  HDSerialNo='123456789'
        *** Program continues and return to the calling program.
        RETURN
    ENDI
    * QUIT  && Quiting the program because the HD doesn't match.
 
RETURN
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

7

Re: Harici Disk MAC adresi

Public code from VFP Forums

Visual Fox Pro
?HDD("C")

 
Function HDD
lparameter m.drv
 
* Limitations:
*    1. Supported Windows versions: 2000, XP, Vista, 7 (untested)
*    2. Can't get HD Serial Number for USB drives
*    3. Needs administrative rights to get HD Serial Number for SCSI drives
*    4. May be something else
 
*    Usage:
*    ?HDD()   && for drive where Windows is installed
*    ?HDD("D")   && for drive D:\</font>
 
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 GetVolumeInformation in Win32API ;
    String lpRootPathName, String @lpVolumeNameBuffer, ;
        Integer nVolumeNameSize, Long @lpVolumeSerialNumber, ;
        Integer @lpMaximumComponentLength, Integer @lpFileSystemFlags, ;
        String @lpFileSystemNameBuffer, Integer nFileSystemNameSize
 
local m.vnb,m.vnbs,m.mcl,m.fsf,m.fsnb,m.fsnbs,m.sn,m.mod,m.rev, ;
    m.pos0,m.pos1,m.pos2,m.pos3,m.pos4,m.ch1,m.ch2, m.vsn, handle, drivenumber, m.sci, ;
    m.sco, m.otv, m.ret_buffersize, m.sco1, m.j, m.scl
if vartype(m.drv)<>"C" or empty(m.drv)
    m.drv=Get_windows_drive()
endif
if empty(m.drv)
    return ""
endif
 
m.drv=left(m.drv,1)+":\"
 
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.drv,@m.vnb,m.vnbs,@m.vsn,@m.mcl,@m.fsf,@m.fsnb,m.fsnbs)
 
if m.vsn<0
    m.vsn=m.vsn+16^8
endif
m.vsn=padl(allt(substr(Transform(m.vsn,"
@0"),3)),8,"0")
 
if Windows_Major_Version()>=5
    m.drivenumber=asc(left(m.drv,1))-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(bitor(0xA0, bitand(m.drivenumber,1)*16))
        m.sci=m.sci+chr(0xEC)
        m.sci=m.sci+chr(0)
        m.sci=m.sci+chr(m.drivenumber)
        m.sci=m.sci+repl(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(allt(conv21(substr(m.sco,37,20))),chr(0),"
")
            m.rev=chrtran(allt(conv21(substr(m.sco,63,8))),chr(0),"
")
            m.mod=chrtran(allt(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=allt(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=allt(left(m.rev,m.pos4-1))
                endif
 
                if m.pos3>0
                    m.pos3=m.pos3+1
                    m.sco1=substr(m.sco, m.pos3,40)
                    m.sco1=allt(m.sco1)
                    m.sn="
"
                    m.pos3=1
                    for m.j=1 to 20
                        m.ch1=chr(eval("
0x"+allt(substr(m.sco1,m.pos3,2))))
                        m.pos3=m.pos3+2
                        m.ch2=chr(eval("
0x"+allt(substr(m.sco1,m.pos3,2))))
                        m.pos3=m.pos3+2
                        m.sn=m.sn+m.ch2+m.ch1
                    endfor
                    m.sn=allt(chrtran(m.sn,chr(0),"
"))
                else
                    m.sn="
"
                endif
 
            endif
 
        endif
 
        if empty(m.sn)
            m.drivenumber=asc(left(m.drv,1))-asc("
C")
            handle = CreateFile("
\\.\"+chr(asc("c")+m.drivenumber)+":", 0xC0000000, 3, 0, 3, 0, 0)
 
            if handle<>-1
                m.sci="
"
                m.sci=m.sci+chr(44)+chr(0)
                m.sci=m.sci+chr(0)
                m.sci=m.sci+chr(0)
                m.sci=m.sci+chr(0)
                m.sci=m.sci+chr(0)
                m.sci=m.sci+chr(6)
                m.sci=m.sci+chr(24)
                m.sci=m.sci+chr(1)+chr(0)+chr(0)+chr(0)
                m.sci=m.sci+chr(192)+chr(0)+chr(0)+chr(0)
                m.sci=m.sci+chr(2)+chr(0)+chr(0)+chr(0)
                m.sci=m.sci+chr(76)+chr(0)+chr(0)+chr(0)
                m.sci=m.sci+chr(44)+chr(0)+chr(0)+chr(0)
                m.sci=m.sci+chr(0x12)+chr(1)+chr(0x80)+chr(0)
                m.sci=m.sci+chr(192)+chr(0)+chr(0)+chr(0)
                m.sci=m.sci+chr(0)+chr(0)+chr(0)+chr(0)
                m.sci=m.sci+chr(0)+chr(0)+chr(0)+chr(0)
 
                m.sci=m.sci+repl(chr(0),32)
                m.sci=m.sci+repl(chr(0),192)
 
                m.ret_buffersize=0
                m.otv=DeviceIoControl(handle, 0x4D004, ;
                    @m.sci, 44, @m.sci, 268, m.ret_buffersize, 0)
 
                CloseHandle(handle)
 
                if m.otv<>0
                    m.scl=asc(substr(m.sci,80))
                    m.sn=substr(m.sci,81,m.scl)
                endif
            endif
 
        endif
 
 
 
    endif
 
*************************************
 
    return m.drv+"
   Vol SN: "+m.vsn+"  "+chrtran(m.fsnb,chr(0),"")+" #  Model: "+m.mod+ ;
        "
   Revision: "+m.rev+"   Serial: "+m.sn
 
 
else
    return "
Unsupported Windows version"
endif
 
 
*** conv21 *************
 
Function conv21
lpara 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)
next
return m.str2
 
*** Windows Major Version ************
 
Function Windows_Major_Version
local m.str, m.otv
Declare Integer GetVersionEx in Win32API String @str
m.str=chr(148)+replic(chr(0),147)
m.otv=GetVersionEx(@m.str)
if m.otv>0
    return asc(substr(m.str,5,1))
else
    return 0
endif
 
*** Get Windows Drive ***************
 
Function Get_Windows_Drive
Declare Integer GetLogicalDriveStrings in Win32API Integer buflen, String @buf
Declare Integer GetDriveType in Win32API String m.pth
local m.buflen, m.buf, m.str1, m.i, m.drvtype
m.buflen=104
m.buf=replicate(chr(0),m.buflen)
GetLogicalDriveStrings(m.buflen, @m.buf)
m.buf=chrtran(m.buf,chr(0)+"
\:","")
m.str1="
"
for m.i=1 to len(m.buf)
    m.drvtype=GetDriveType(substr(m.buf,m.i,1)+"
:\")
    if m.drvtype=3
        m.str1=m.str1+upper(substr(m.buf,m.i,1))
    endif
next
 
if empty(m.str1)
    return "
"
endif
 
local m.sd
m.sd=read_sysdir()
if upper(left(m.sd,1)) $ m.str1 and substr(m.sd,2,2)=="
:\"
    return upper(left(m.sd,3))
else
    return "
"
endif
 
*** Get System Directory ************
 
Function read_sysdir
Declare GetSystemDirectory in Win32API String @buffer, Integer buffersize
local m.buf
m.buf=space(128)
GetSystemDirectory(@m.buf,128)
return allt(m.buf)
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

8

Re: Harici Disk MAC adresi

Public code from VFP Forums
*!*    Author :  Samir H.

Visual Fox Pro
oWMi = getobject("winmgmts://")

col =  oWMI.ExecQuery("Select * from win32_diskdrive")
for each disk in col
     ?disk.PNPDeviceID
next
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

9

Re: Harici Disk MAC adresi

*!*    Author : Mike Gagnon

Visual Fox Pro
Local objWMI,colClass,objClass,strComputer

Create Cursor PhysicalMedia (serialnumber c(100) Null)
strComputer = "."
objWMI = Getobject("winmgmts:\\" +strComputer + "\root\cimv2")
colClass = objWMI.ExecQuery("Select * from Win32_PhysicalMedia",,48)
 
For Each objClass In colClass
    Insert Into PhysicalMedia (serialnumber) Values (objClass.serialnumber)
Next
Browse Normal
 
******* OR
 
Local  objWMIService, objItem, colItems, strComputer
strComputer = "."
 
objWMIService = Getobject("winmgmts:\\"+ strComputer + "\root\cimv2")
colItems = objWMIService.ExecQuery("Select * from Win32_DiskDrive")
 
For Each objItem In colItems
    ? "Computer: " +Transform(objItem.SystemName)
    ?"Status: " + Transform(objItem.Status)
    ?" =================================="
    ?"Name: " + Transform(objItem.Name)
    ?"PNPDeviceID:" + Transform(objItem.PNPDeviceID)
    ?"Serial Number:" + Transform(objItem.SerialNumber)
    ?"Description: " + Transform(objItem.Description)
    ?"Manufacturer: " + Transform(objItem.Manufacturer)
    ?"Model: " + Transform(objItem.Model)
    ?"Size: " + Transform(Val(objItem.Size )/1073741824) + " GB"
    ?"Number of Partitions: " + Transform(objItem.Partitions)
    ?"Total Cylinders: " + Transform(objItem.TotalCylinders)
    ?"Tracks PerCylinder: " + Transform(objItem.TracksPerCylinder)
    ?"Total Heads: " + Transform(objItem.TotalHeads)
    ?"Total Sectors: " + Transform(objItem.TotalSectors)
    ?"Bytes PerSector: " + Transform(objItem.BytesPerSector)
    ?"Sectors PerTrack: " + Transform(objItem.SectorsPerTrack)
    ?"Total Tracks: " + Transform(objItem.TotalTracks)
Next
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

10

Re: Harici Disk MAC adresi

Uğur Bey bombalamış resmen smile

11

Re: Harici Disk MAC adresi

smile teşekkürler.

12

Re: Harici Disk MAC adresi

Arşivde olan kodlardan smile

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

13 Son düzenleyen, Aligocmen (06.08.2014 16:26:36)

Re: Harici Disk MAC adresi

Bu arada aradığım tam olarak şuydu :

Visual Fox Pro
Create Cursor myDisks (DriveLetter c(1),SerialNumber c(50),Model c(50),DeviceID c(50),VolumeName c(50),VolumeSerialNumber c(20))

 
wmiServices  = Getobject("winmgmts:{impersonationLevel=Impersonate}!//.")
wmiDiskDrives =  wmiServices.ExecQuery("SELECT Model,DeviceID FROM Win32_DiskDrive")
 
For Each wmiDiskDrive In wmiDiskDrives
  lcDeviceID = Trim(Strtran(wmiDiskDrive.DeviceID,'\','\\'))
  wmiDiskPartitions = wmiServices.ExecQuery(;
    'ASSOCIATORS OF {Win32_DiskDrive.DeviceID="' +;
    m.lcDeviceID + '"
} WHERE '+ ;
    'AssocClass = Win32_DiskDriveToDiskPartition')
 
  For Each wmiDiskPartition In wmiDiskPartitions
    wmiLogicalDisks = wmiServices.ExecQuery( ;
      'ASSOCIATORS OF {Win32_DiskPartition.DeviceID="'+;
      wmiDiskPartition.DeviceID + '"
} WHERE '+;
      'AssocClass = Win32_LogicalDiskToPartition')
 
    For Each wmiLogicalDisk In wmiLogicalDisks
      wmiDiskVolumes = wmiServices.ExecQuery(;
        "Select deviceID,VolumeName,VolumeSerialNumber from Win32_LogicalDisk"+;
        " where deviceID = '" + wmiLogicalDisk.deviceID + "'" )
      For Each oVolume In wmiDiskVolumes
        lcVolumeName          = oVolume.VolumeName
        lcVolumeSerialNumber  = oVolume.VolumeSerialNumber
        Exit
      Endfor
 
      wmiDisks =  wmiServices.ExecQuery(;
        'SELECT * FROM Win32_PhysicalMedia where Tag="'+m.lcDeviceID+'"')
      For Each wmiDisk In wmiDisks
        Insert Into myDisks ;
          (DriveLetter,SerialNumber,Model,DeviceID,VolumeName,VolumeSerialNumber) ;
          values ;
          (wmiLogicalDisk.DeviceID,;
          wmiDisk.SerialNumber,;
          wmiDiskDrive.Model,;
          wmiDiskDrive.DeviceID,;
          m.lcVolumeName,;
          m.lcVolumeSerialNumber)
      Endfor
    Endfor
  Endfor
Endfor
Browse


***NOT: Kod Windows XP 'de Harici Disk Bilgilerini Okuyamıyor. (Belkide USB bağlantılarını..)

14

Re: Harici Disk MAC adresi

Benim yazdigim bir koda cok benziyor smile

Visual Fox Pro
Create Cursor myDisks (DriveLetter c(1),SerialNumber c(50),Model c(50),;

  DeviceID c(50),VolumeName c(50),VolumeSerialNumber c(20))
 
wmiServices  = Getobject("winmgmts:{impersonationLevel=Impersonate}!//.")
wmiDiskDrives =  wmiServices.ExecQuery("SELECT Model,DeviceID FROM Win32_DiskDrive")
 
For Each wmiDiskDrive In wmiDiskDrives
  lcDeviceID = Trim(Strtran(wmiDiskDrive.DeviceID,'\','\\'))
  wmiDiskPartitions = wmiServices.ExecQuery(;
    'ASSOCIATORS OF {Win32_DiskDrive.DeviceID="' +;
    m.lcDeviceID + '"
} WHERE '+ ;
    'AssocClass = Win32_DiskDriveToDiskPartition')
 
  For Each wmiDiskPartition In wmiDiskPartitions
    wmiLogicalDisks = wmiServices.ExecQuery( ;
      'ASSOCIATORS OF {Win32_DiskPartition.DeviceID="'+;
      wmiDiskPartition.DeviceID + '"
} WHERE '+;
      'AssocClass = Win32_LogicalDiskToPartition')
 
    For Each wmiLogicalDisk In wmiLogicalDisks
      wmiDiskVolumes = wmiServices.ExecQuery(;
        "Select deviceID,VolumeName,VolumeSerialNumber from Win32_LogicalDisk"+;
        " where deviceID = '" + wmiLogicalDisk.DeviceID + "'" )
      For Each oVolume In wmiDiskVolumes
        lcVolumeName          = oVolume.VolumeName
        lcVolumeSerialNumber  = oVolume.VolumeSerialNumber
        Exit
      Endfor
 
      wmiDisks =  wmiServices.ExecQuery(;
        'SELECT * FROM Win32_PhysicalMedia where Tag="'+m.lcDeviceID+'"')
      For Each wmiDisk In wmiDisks
        Insert Into myDisks ;
          (DriveLetter,SerialNumber,Model,DeviceID,VolumeName,VolumeSerialNumber) ;
          values ;
          (wmiLogicalDisk.DeviceID,;
          SwapAndTranslate(wmiDisk.SerialNumber),;
          wmiDiskDrive.Model,;
          wmiDiskDrive.DeviceID,;
          m.lcVolumeName,;
          m.lcVolumeSerialNumber)
      Endfor
    Endfor
  Endfor
Endfor
Browse
 
Procedure SwapAndTranslate(tcString)
  tcString = Trim(m.tcString)
  If Len(m.tcString)%2 = 0 And ;
      EMPTY(Chrtran(Upper(m.tcString),'0123456789ABCDEF',''))
    Local ix,lcString
    lcString = Space(Len(m.tcString)/2)
    For ix = 1 To Len(m.tcString)/2
      lcString = Stuff(m.lcString,;
        m.ix+Iif(m.ix%2=0,-1,1),1,;
        Chr(Eval('0x'+Substr(m.tcString,(m.ix-1)*2+1,2))))
    Endfor
    Return Alltrim(m.lcString)
  Else
    Return m.tcString
  Endif
Endproc

15 Son düzenleyen, Aligocmen (25.07.2014 09:07:53)

Re: Harici Disk MAC adresi

Çok şaşırtıcı , bence de sen yazmışsın smile ama şimdi nerede bulduğumu hatırlamıyorum bile.
Galiba bir forumdu.