* This.cHD_SerieNo
* This.cRevision
* This.cModel
* This.cFileSystem
* This.cVolSerieNo
*---------------------------------------------------------------
LPARAMETERS cDrive
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
LOCAL m.buflen, m.buf, nIdx, m.fsnb, m.fsnbs
m.buflen = 104
m.buf = REPLICATE(CHR(0), m.buflen)
GetLogicalDriveStrings(m.buflen, @m.buf)
m.buf = CHRTRAN(m.buf, CHR(0) + "\:","")
m.str1 = ""
IF OCCURS(cDrive, m.buf) == 0
MESSAGEBOX(cDrive + " sürücü bulunamadý.", 16, "")
RETURN FALSE
ENDIF
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(cDrive + ":\", @m.vnb, m.vnbs, @m.vsn, @m.mcl, @m.fsf, @m.fsnb, m.fsnbs)
THIS.cFileSystem = m.fsnb
THIS.cVolSerieNo = m.vsn
IF THIS.cVolSerieNo < 0
THIS.cVolSerieNo = THIS.cVolSerieNo + 168
ENDIF
THIS.cVolSerieNo = PADL(ALLTRIM(SUBSTR(TRANSFORM(THIS.cVolSerieNo,"@0"), 3)), 8, "0")
m.drivenumber = ASC(cDrive) - ASC("C")
handle = CreateFile("\\.\" + CHR(ASC("c") + m.drivenumber) + ":",0xC0000000, 3, 0, 3, 0, 0)
THIS.cHD_SerieNo = ""
THIS.cModel = ""
THIS.cRevision = ""
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
THIS.cHD_SerieNo = CHRTRAN( ALLTRIM( THIS.conv21( SUBSTR(m.sco, 37, 20) ) ),CHR(0), "")
THIS.cRevision = CHRTRAN( ALLTRIM( THIS.conv21( SUBSTR(m.sco, 63, 8) ) ),CHR(0), "")
THIS.cModel = CHRTRAN( ALLTRIM( THIS.conv21( SUBSTR(m.sco, 71, 40) ) ),CHR(0), "")
ENDIF
ENDIF
IF EMPTY(THIS.cHD_SerieNo)
handle = CreateFile("\\.\" + CHR(ASC("c") + m.drivenumber) +":", 0x00000000, 3,0, 3, 0, 0)
IF handle <> -1
THIS.cHD_SerieNo = ""
THIS.cModel = ""
THIS.cRevision = ""
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))
THIS.cModel = SUBSTR(m.sco, m.pos1+1, m.pos2 - m.pos1)
m.pos4 = AT(CHR(0), THIS.cModel)
IF m.pos4 > 0
THIS.cModel = ALLTRIM(CHRTRAN(THIS.cModel, CHR(0), ""))
ENDIF
IF m.pos3 > m.pos2
THIS.cRevision = SUBSTR(m.sco, m.pos2+1, m.pos3 - m.pos2)
ELSE
THIS.cRevision = SUBSTR(m.sco, m.pos2+1)
ENDIF
m.pos4 = AT(CHR(0), THIS.cRevision)
IF m.pos4 > 0
THIS.cRevision = ALLTRIM(LEFT(THIS.cRevision, m.pos4 - 1))
ENDIF
IF m.pos3 > 0
m.pos3 = m.pos3 + 1
m.sco1 = SUBSTR(m.sco, m.pos3, 40)
m.sco1 = ALLTRIM(m.sco1)
THIS.cHD_SerieNo = ""
m.pos3 = 1
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
THIS.cHD_SerieNo = THIS.cHD_SerieNo + m.ch2 + m.ch1
ENDFOR
THIS.cHD_SerieNo = ALLTRIM(CHRTRAN(THIS.cHD_SerieNo, CHR(0), ""))
ELSE
THIS.cHD_SerieNo = ""
ENDIF
ENDIF
ENDIF
ENDIF