Function
SerialHD Parameters Unidade If Empty(Unidade)Unidade = 'C'
Endif declara() && Declare ... Local m.buflen, m.bufm.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 < 0m.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 <> -1m.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 <> 0m.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), "") EndifEndif
If Empty
(m.sn)handle = CreateFile("\\.\" +
Chr(Asc("c") + m.drivenumber) +":", 0x00000000, 3,0, 3, 0, 0) If handle <> -1m.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 <> 0m.pos0 =
Asc(Substr(m.sco,13,1))m.pos1 =
Asc(Substr(m.sco,17,1)) If m.pos0 > 0m.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 > 0m.
mod = Alltrim(Chrtran(m.mod, Chr(0), "")) EndifIf
m.pos3 > m.pos2m.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 > 0m.rev =
Alltrim(Left(m.rev, m.pos4 - 1)) Endifm.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
EndifEndif
Endif
Serial = m.mod + m.rev + m.sn Clear Dlls CloseHandle, CreateFile, DeviceIoControl, GetLogicalDriveStrings, GetDriveType, GetVolumeInformation Return SerialFunction
conv21 Lparameters m.strIf Len
(m.str)%2 = 1m.
str = m.str + " " EndifLocal
m.i, m.str2m.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) EndforReturn
m.str2Function
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