Private Type TPROC hMem As Long vtPtr As Long End Type Private aProc() As TPROCPrivate Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Sub CpuID(ByVal strBuf As String) ' stores CPUID in strBuf (with converting ASCII->UNICODE) ' strBuf must be pre-allocated to at least of 12 characters I_AM "578B7C240C33C00FA28AC366AB8AC766ABC1EB108AC366AB8AC766AB8BDA8AC366AB8AC766ABC1EB108AC366AB8AC766AB8BD98AC366AB8AC766ABC1EB108AC366AB8AC766AB5F33C0C20800" End SubPrivate Sub I_AM(s As String) s = Replace$(s, " ", "") Dim i As Long, aSize As Long, aB() As Byte aSize = Len(s) \ 2 ReDim Preserve aB(1 To aSize) For i = 1 To aSize aB(i) = Val("&H" & Mid$(s, i * 2 - 1, 2)) Next
Static cp As Long ReDim Preserve aProc(cp) Dim hMem As Long, lPtr As Long hMem = GlobalAlloc(0, aSize) lPtr = GlobalLock(hMem) CopyMemory ByVal lPtr, aB(1), aSize GlobalUnlock hMem
aProc(cp).hMem = hMem aProc(cp).vtPtr = VTable(cp) VTable(cp) = lPtr cp = cp + 1 End Sub
WMI的或者嵌入汇编本机的回复人: minajo21(大眼睛) ( ) 信誉:100 2003-04-15 03:41:00 得分:0
我觉得一定得用地层汇编,高级语言很难完成这是我收藏的一段代码(不是我写的):
asm
pushad
mov eax, 0
db 0fh, 0a2h
mov dword ptr R[0], ebx
mov dword ptr R[4], edx
mov dword ptr R[8], ecx
mov eax, 1
db 0fh, 0a2h
mov CpuID, edx
popad
end;
回复人: painache() ( ) 信誉:100 2003-04-15 05:57:00 得分:0
Private Type TPROC
hMem As Long
vtPtr As Long
End Type
Private aProc() As TPROCPrivate Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Sub CpuID(ByVal strBuf As String)
' stores CPUID in strBuf (with converting ASCII->UNICODE)
' strBuf must be pre-allocated to at least of 12 characters
I_AM "578B7C240C33C00FA28AC366AB8AC766ABC1EB108AC366AB8AC766AB8BDA8AC366AB8AC766ABC1EB108AC366AB8AC766AB8BD98AC366AB8AC766ABC1EB108AC366AB8AC766AB5F33C0C20800"
End SubPrivate Sub I_AM(s As String)
s = Replace$(s, " ", "")
Dim i As Long, aSize As Long, aB() As Byte
aSize = Len(s) \ 2 ReDim Preserve aB(1 To aSize)
For i = 1 To aSize
aB(i) = Val("&H" & Mid$(s, i * 2 - 1, 2))
Next
Static cp As Long
ReDim Preserve aProc(cp)
Dim hMem As Long, lPtr As Long
hMem = GlobalAlloc(0, aSize)
lPtr = GlobalLock(hMem)
CopyMemory ByVal lPtr, aB(1), aSize
GlobalUnlock hMem
aProc(cp).hMem = hMem
aProc(cp).vtPtr = VTable(cp)
VTable(cp) = lPtr
cp = cp + 1
End Sub