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.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
handle = CreateFile("\\.\" +
Chr(Asc("c") + m.drivenumber) +":", 0x00000000, 3,0, 3, 0, 0)
If handle <> -1
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
*!*
If m.pos3 > 0
*!*
m.pos3 = m.pos3 + 1
*!*
m.sco1 = Substr(m.sco, m.pos3, 40)
*!*
m.sco1 = Alltrim(m.sco1)
*!*
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
*!*
Endfor
*!*
m.sn = Alltrim(Chrtran(
m.sn, Chr(0), ""))
*!*
Else
*!*
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
#====================