Accueil > > > RECUPERE LES INFORMATIONS DU POSTE
RECUPERE LES INFORMATIONS DU POSTE
Information sur la source
Description
Je suis tout nouveau dans l'assembleur i86, voici mon premier petit programme. Celui ci m'as paermis de me familliariser avec les fonction Windows. Ce code n'a rien d'exceptionel, mais j'aimerais bien avoir vos avis, afin de m'aider a progressé.
Source
- .586
- .MMX
- .model flat, stdcall
- option casemap:none
-
- ;================================================
- ; These are the Inlcude files for Window calls
- ;================================================
- include \masm32\include\windows.inc
- include \masm32\include\masm32.inc
- include \masm32\include\user32.inc
- include \masm32\include\kernel32.inc
- include \masm32\include\ws2_32.inc
- include \masm32\include\advapi32.inc
- include \masm32\include\netapi32.inc
-
- ;===============================================
- ; The Lib's for those included files
- ;================================================
- includelib \masm32\lib\masm32.lib
- includelib \masm32\lib\user32.lib
- includelib \masm32\lib\kernel32.lib
- includelib \masm32\lib\ws2_32.lib
- includelib \masm32\lib\advapi32.lib
- includelib \masm32\lib\netapi32.lib
-
-
- ; --------------- Local Macros
- SzText MACRO Name, Text:VARARG
- LOCAL lbl
- jmp lbl
- Name db Text, 0
- lbl:
- ENDM
-
- M2M MACRO M1, M2
- push M2
- pop M1
- ENDM
-
- Return MACRO arg
- mov eax, arg
- ret
- ENDM
-
- val MACRO DDvalue
- LOCAL rvstring
- .data
- rvstring db 20 dup (0)
- align 4
- .code
- push OFFSET rvstring
- push DDvalue
- call ltoa
- EXITM <OFFSET rvstring>
- ENDM
-
- .CONST
- PF_3DNOW_INSTRUCTIONS_AVAILABLE EQU 7
-
- ; ---------------------------------------------------------------------------
- .data
-
- Screen_X dd 0
- Screen_Y dd 0
-
- MousePresent dd FALSE
- MouseWhell dd FALSE
- MMX_Available dd FALSE
- XMMI_Available dd FALSE
- D3_Available dd FALSE
-
- SysDirectory db MAX_PATH dup(0)
- WinDirectory db MAX_PATH dup(0)
- CurDirectory db MAX_PATH dup(0)
- TmpDirectory db MAX_PATH dup(0)
- MacAddress db 13 dup(0)
- IpAddress dd 100 dup(0)
- ComputerName db 32 dup(0)
- UserName db 32 dup(0)
- DomaineName db 128 dup(0)
- Free_Disk dd 0, 0
- Total_Disk dd 0, 0
- Free_Memory dd 0
- Total_Memory dd 0
- Frequence dd 0, 0
- Time dd 0
- Temp dd 0, 0
-
- Disk db "c:\", 0
- String_MacAdd db "* ", 0
-
- .data?
- Bytes dd ?
- Buffer dd ?
- INT_64 dq ?
-
- Adapter_Stat STRUCT
- Adapt ADAPTER_STATUS <> ; The ADAPTER_STATUS structure contains information about a network adapter.
- NameBuff NAME_BUFFER 1Eh dup ({}) ; The NAME_BUFFER structure contains information about a local network name.
- Adapter_Stat ENDS
- l_ASTAT Adapter_Stat <>
- l_ENUM LANA_ENUM <> ; The LANA_ENUM structure contains the numbers for the current LAN adapters.
- l_NCB NCB <> ; The NCB structure represents a network control block
- Memory MEMORYSTATUS <>
-
- .code
- ; ---------------------------------------------------------------------------
-
- start:
- call init
- invoke MessageBox, 0, ADDR UserName, ADDR ComputerName, MB_OK
- invoke MessageBox, 0, ADDR ComputerName, ADDR ComputerName, MB_OK
- invoke MessageBox, 0, ADDR DomaineName, ADDR ComputerName, MB_OK
- invoke MessageBox, 0, ADDR WinDirectory, ADDR ComputerName, MB_OK
- invoke MessageBox, 0, ADDR SysDirectory, ADDR ComputerName, MB_OK
- invoke MessageBox, 0, ADDR CurDirectory, ADDR ComputerName, MB_OK
- invoke MessageBox, 0, ADDR TmpDirectory, ADDR ComputerName, MB_OK
- invoke MessageBox, 0, val(Total_Disk), ADDR ComputerName, MB_OK
- invoke MessageBox, 0, val(Free_Disk), ADDR ComputerName, MB_OK
- invoke MessageBox, 0, val(Total_Memory), ADDR ComputerName, MB_OK
- invoke MessageBox, 0, val(Free_Memory), ADDR ComputerName, MB_OK
- invoke MessageBox, 0, val(Screen_X), ADDR ComputerName, MB_OK
- invoke MessageBox, 0, val(Screen_Y), ADDR ComputerName, MB_OK
- invoke MessageBox, 0, ADDR MacAddress, ADDR ComputerName, MB_OK
- invoke MessageBox, 0, val(Frequence), ADDR ComputerName, MB_OK
- invoke MessageBox, 0, ADDR IpAddress, ADDR ComputerName, MB_OK
- ;==================
- ; Leave the program
- ;==================
- push eax ; [in] Exit code for the process and all threads terminated as a result of this call.
- call ExitProcess
- ret
-
-
- init proc
-
- .code
- ; =========
- ; User name
- ; =========
- mov Buffer, 32
- push offset Buffer ; [in, out] On input, this variable specifies the size of the lpBuffer buffer, in TCHARs. On output, the variable receives the number of TCHARs copied to the buffer, including the terminating null character.
- push offset UserName ; [out] Pointer to the buffer to receive the null-terminated string containing the user's logon name.
- call GetUserName ; If the function succeeds, the return value is a nonzero value(Len of UserName+1)
- ; =============
- ; Computer Name
- ; =============
- mov Buffer, 32
- push offset Buffer ; [in, out] On input, specifies the size of the buffer, in TCHARs. On output, receives the number of TCHARs copied to the destination buffer, not including the terminating null character.
- push offset ComputerName ; [out] Pointer to a buffer that receives a null-terminated string containing the computer name or the cluster virtual server name.
- push 0 ; [in] Type of name to retrieve
- call GetComputerNameEx ; If the function succeeds, the return value is a nonzero value.
-
- ; ============
- ; Domaine Name
- ; ============
- mov Buffer, 128
- push offset Buffer ; [in, out] On input, specifies the size of the buffer, in TCHARs. On output, receives the number of TCHARs copied to the destination buffer, not including the terminating null character.
- push offset DomaineName ; [out] Pointer to a buffer that receives a null-terminated string containing the computer name or the cluster virtual server name.
- push 2 ; [in] Type of name to retrieve
- call GetComputerNameEx ; If the function succeeds, the return value is a nonzero value.
-
- ; =================
- ; Windows Directory
- ; =================
- push MAX_PATH ; [in] Size of the string buffer in TCHARs
- push offset WinDirectory ; [out] Pointer to a string buffer that receives the null-terminated string
- Call GetWindowsDirectory ; If the function succeeds, the return value is the length of the string copied to the buffer, in TCHARs, not including the terminating null character.
-
- ; ================
- ; System Directory
- ; ================
- push MAX_PATH ; [in] Size of the string buffer in TCHARs
- push offset SysDirectory ; [out] Pointer to a string buffer that receives the null-terminated string
- Call GetSystemDirectory ; If the function succeeds, the return value is the length of the string copied to the buffer, in TCHARs, not including the terminating null character.
-
- ; =================
- ; Current Directory
- ; =================
- push offset CurDirectory ; [out] Pointer to a string buffer that receives the null-terminated string
- push MAX_PATH ; [in] Size of the string buffer in TCHARs
- Call GetCurrentDirectory ; If the function succeeds, the return value is the length of the string copied to the buffer, in TCHARs, not including the terminating null character.
-
- ; ==============
- ; Temp Directory
- ; ==============
- push offset TmpDirectory ; [out] Pointer to a string buffer that receives the null-terminated string
- push MAX_PATH ; [in] Size of the string buffer in TCHARs
- Call GetTempPath ; If the function succeeds, the return value is the length of the string copied to the buffer, in TCHARs, not including the terminating null character.
-
- ; =========
- ; Disk info
- ; =========
- push offset Free_Disk
- push offset Total_Disk
- push offset INT_64
- push offset Disk ; [in]Pointer to a null-terminated string that specifies a directory on the disk. If this parameter is NULL, the function uses the root of the current disk.
- call GetDiskFreeSpaceEx ; If the function succeeds, the return value is nonzero.
- ; ++++++++++++++++
- ; Total Space Disk
- ; ++++++++++++++++
- mov eax, [Total_Disk+4]
- mov ebx, [Total_Disk]
- shl eax, 16 ; push high bytes of eax in low bytes
- shr ebx, 16 ; push low bytes of ecx in high bytes
- add eax, ebx
- shr eax, 4 ; 4+16=20 convert octets in mega octect
- mov Total_Disk, eax
- ; +++++++++++++++++++++
- ; Free disk space Total
- ; +++++++++++++++++++++
- mov eax, [Free_Disk+4]
- mov ebx, [Free_Disk]
- shl eax, 16 ; push high bytes of eax in low bytes
- shr ebx, 16 ; push low bytes of ecx in high bytes
- add eax, ebx
- shr eax, 4 ; 4+16=20 convert octets in mega octect
- mov Free_Disk, eax
- ; ===========
- ; Free Memory
- ; ===========
- push OFFSET Memory
- call GlobalMemoryStatus
- mov eax, Memory.dwTotalPhys ; bytes of physical memory
- shr eax, 20 ; convert octect to Mo
- mov Total_Memory, eax
- mov eax, Memory.dwAvailPhys ; free physical memory bytes
- shr eax, 20 ; convert octect to Mo
- mov Free_Memory, eax
-
- ;==========================================
- ; Get the Screen resolution
- ;==========================================
- push SM_CXSCREEN ; Width of the screen of the primary display monitor, in pixels.
- call GetSystemMetrics ; If the function succeeds, the return value is the requested system metric or configuration setting else zero.
- Mov Screen_X, eax
- push SM_CYSCREEN ; Height of the screen of the primary display monitor, in pixels.
- call GetSystemMetrics ; If the function succeeds, the return value is the requested system metric or configuration setting else zero.
- Mov Screen_Y, eax
-
- ; =====================
- ; Scan if mouse present
- ; =====================
- push SM_MOUSEPRESENT ; Scan if mouse is present.
- call GetSystemMetrics ; Nonzero if a mouse is installed; zero otherwise.
- or eax, eax
- jz NoMouse
- mov MousePresent, TRUE
- NoMouse:
-
- ; ===================
- ; Scan if mouse Wheel
- ; ===================
- push SM_MOUSEWHEELPRESENT ; Scan if mouse Wheel.
- call GetSystemMetrics ; Nonzero if a mouse with a wheel is installed; zero otherwise.
- or eax, eax
- jz NoWheel
- mov MouseWhell, TRUE
- NoWheel:
-
- ; ===============
- ; GET MAC ADDRESS
- ; ===============
- mov l_NCB.ncb_command, NCBENUM
- mov l_NCB.ncb_length, SIZEOF l_ENUM
- mov l_NCB.ncb_buffer, OFFSET l_ENUM
- ; ***************************************************************************************
- ; The Netbios function interprets and executes the specified network control block (NCB).
- ; ***************************************************************************************
- push OFFSET l_NCB ; Pointer to an NCB structure that describes the network control block.
- call Netbios ; For synchronous requests, the return value is the return code of the NCB structure
-
- ; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- ; The RtlZeroMemory routine fills a block of memory with zeros, given a pointer to the block and the length, in bytes, to be filled.
- ; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- push SIZEOF l_NCB ; Specifies the number of bytes to be zeroed.
- push OFFSET l_NCB ; Pointer to the memory to be filled with zeros.
- call RtlZeroMemory ; No return
-
- mov l_NCB.ncb_command, NCBRESET
- mov esi, OFFSET l_ENUM.lana
- mov al, [esi + ecx]
- mov l_NCB.ncb_lana_num, al
- ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- ; The Netbios function interprets and executes the specified network control block (NCB).
- ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- push OFFSET l_NCB ; Pointer to an NCB structure that describes the network control block.
- call Netbios ; For synchronous requests, the return value is the return code of the NCB structure
-
- mov l_NCB.ncb_command, NCBASTAT
- ; +++++++++++++++++++++++++++++++++++++++++++++++++
- ; The lstrcpy function copies a string to a buffer.
- ; +++++++++++++++++++++++++++++++++++++++++++++++++
- push OFFSET String_MacAdd ; [in] Pointer to the null-terminated string to be copied.
- push OFFSET l_NCB.ncb_callname ; [out] Pointer to a buffer to receive the contents of the string pointed to by the lpString2 parameter. The buffer must be large enough to contain the string, including the terminating null character.
- call lstrcpy ; If the function succeeds, the return value is a pointer to the buffer.
-
- mov l_NCB.ncb_length, SIZEOF l_ASTAT
- mov l_NCB.ncb_buffer, OFFSET l_ASTAT
- ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- ; The Netbios function interprets and executes the specified network control block (NCB).
- ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- push OFFSET l_NCB ; Pointer to an NCB structure that describes the network control block.
- call Netbios ; For synchronous requests, the return value is the return code of the NCB structure
-
- ; +++++++++++++++++++++++++++++++++++++++++++++++++++++
- ; 6 byte Binary Conversion to ASCII HEX (12 characters)
- ; +++++++++++++++++++++++++++++++++++++++++++++++++++++
- mov esi, OFFSET l_ASTAT.Adapt.adapter_address
- mov edi, OFFSET MacAddress
- xor ecx, ecx
- xor ebx, ebx
- mov cl, 0Bh
- mov bl, 05h
- bintohex:
- mov al, [esi + ebx]
- push eax
- and al, 00001111b
- add al, 90h
- daa
- adc al, 40h
- daa
- mov [edi + ecx], al
- dec ecx
- pop eax
- shr al, 4h
- and al, 00001111b
- add al, 90h
- daa
- adc al, 40h
- daa
- mov [edi + ecx], al
- dec ebx
- dec ecx
- jns bintohex
-
- ; =======================
- ; GET Processor Frequence
- ; =======================
- call GetTickCount ; The return value is the number of milliseconds that have elapsed since the system was started.
- mov Time, eax ; Time reference
- rdtsc ; Number of cycle since boot
- shr eax,2 ; for support proccessor more speed than 4 Ghz (4*2^2=16)
- mov ebx, eax ; save the result in ebx
-
- time_wait: ; loop since 1, 048 seconds
- call GetTickCount; The return value is the number of milliseconds that have elapsed since the system was started.
- sub eax, Time ; compare eax with time reference
- cmp eax, 1048 ; while time <1.048 seconds (2^20 microseconds)
- jl time_wait
- rdtsc ; Number of cycle since boot
- shr eax,2 ; for support proccessor more speed than 4 Ghz (4*2^2=16)
- sub eax, ebx ; Number of cycle in the lap time
- shr eax, 18 ; Get ony the Mega cycle (18+2=20)
- mov Frequence, eax
-
- ; =====================
- ; GET Processor Feature
- ; =====================
- ; ++++++++++++++++++++
- ; MMX instruction set
- ; ++++++++++++++++++++
- push PF_MMX_INSTRUCTIONS_AVAILABLE
- call IsProcessorFeaturePresent
- mov MMX_Available, eax
- ; +++++++++++++++++++
- ; SSE instruction set
- ; +++++++++++++++++++
- push PF_XMMI_INSTRUCTIONS_AVAILABLE
- call IsProcessorFeaturePresent
- mov XMMI_Available, eax
- ; ++++++++++++++++++++++
- ; 3D-Now instruction set
- ; ++++++++++++++++++++++
- push PF_3DNOW_INSTRUCTIONS_AVAILABLE
- call IsProcessorFeaturePresent
- mov D3_Available, eax
- ; ==============
- ; Get IP Address
- ; ==============
- push offset IpAddress ; [out] Pointer to the WSADATA data structure that is to receive details of the Windows Sockets implementation.
- push 202h ; [in] Highest version of Windows Sockets support that the caller can use.
- call WSAStartup ; function returns zero if successful. Otherwise, it returns one of the error codes listed in the following.
- push offset ComputerName ; [in] Pointer to the null-terminated name of the host to resolve.
- call gethostbyname ; If no error occurs, gethostbyname returns a pointer to the hostent structure.
- mov ecx, [eax] + 12 ; h_addr_list of the hostent structure.
- mov ebx, [ecx]
- mov eax, [ebx]
- mov ebx, offset IpAddress
- push eax ; Pointer to an in_addr structure that represents an Internet host address.
- call inet_ntoa ; The inet_ntoa function converts an (Ipv4) Internet network address into a string in Internet standard dotted format.
- iploop:
- mov cl, [eax]
- mov [ebx], cl
- inc eax
- inc ebx
- test cl, cl
- jnz iploop
- ret
- init endp
-
- end start
-
.586
.MMX
.model flat, stdcall
option casemap:none
;================================================
; These are the Inlcude files for Window calls
;================================================
include \masm32\include\windows.inc
include \masm32\include\masm32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\ws2_32.inc
include \masm32\include\advapi32.inc
include \masm32\include\netapi32.inc
;===============================================
; The Lib's for those included files
;================================================
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\ws2_32.lib
includelib \masm32\lib\advapi32.lib
includelib \masm32\lib\netapi32.lib
; --------------- Local Macros
SzText MACRO Name, Text:VARARG
LOCAL lbl
jmp lbl
Name db Text, 0
lbl:
ENDM
M2M MACRO M1, M2
push M2
pop M1
ENDM
Return MACRO arg
mov eax, arg
ret
ENDM
val MACRO DDvalue
LOCAL rvstring
.data
rvstring db 20 dup (0)
align 4
.code
push OFFSET rvstring
push DDvalue
call ltoa
EXITM <OFFSET rvstring>
ENDM
.CONST
PF_3DNOW_INSTRUCTIONS_AVAILABLE EQU 7
; ---------------------------------------------------------------------------
.data
Screen_X dd 0
Screen_Y dd 0
MousePresent dd FALSE
MouseWhell dd FALSE
MMX_Available dd FALSE
XMMI_Available dd FALSE
D3_Available dd FALSE
SysDirectory db MAX_PATH dup(0)
WinDirectory db MAX_PATH dup(0)
CurDirectory db MAX_PATH dup(0)
TmpDirectory db MAX_PATH dup(0)
MacAddress db 13 dup(0)
IpAddress dd 100 dup(0)
ComputerName db 32 dup(0)
UserName db 32 dup(0)
DomaineName db 128 dup(0)
Free_Disk dd 0, 0
Total_Disk dd 0, 0
Free_Memory dd 0
Total_Memory dd 0
Frequence dd 0, 0
Time dd 0
Temp dd 0, 0
Disk db "c:\", 0
String_MacAdd db "* ", 0
.data?
Bytes dd ?
Buffer dd ?
INT_64 dq ?
Adapter_Stat STRUCT
Adapt ADAPTER_STATUS <> ; The ADAPTER_STATUS structure contains information about a network adapter.
NameBuff NAME_BUFFER 1Eh dup ({}) ; The NAME_BUFFER structure contains information about a local network name.
Adapter_Stat ENDS
l_ASTAT Adapter_Stat <>
l_ENUM LANA_ENUM <> ; The LANA_ENUM structure contains the numbers for the current LAN adapters.
l_NCB NCB <> ; The NCB structure represents a network control block
Memory MEMORYSTATUS <>
.code
; ---------------------------------------------------------------------------
start:
call init
invoke MessageBox, 0, ADDR UserName, ADDR ComputerName, MB_OK
invoke MessageBox, 0, ADDR ComputerName, ADDR ComputerName, MB_OK
invoke MessageBox, 0, ADDR DomaineName, ADDR ComputerName, MB_OK
invoke MessageBox, 0, ADDR WinDirectory, ADDR ComputerName, MB_OK
invoke MessageBox, 0, ADDR SysDirectory, ADDR ComputerName, MB_OK
invoke MessageBox, 0, ADDR CurDirectory, ADDR ComputerName, MB_OK
invoke MessageBox, 0, ADDR TmpDirectory, ADDR ComputerName, MB_OK
invoke MessageBox, 0, val(Total_Disk), ADDR ComputerName, MB_OK
invoke MessageBox, 0, val(Free_Disk), ADDR ComputerName, MB_OK
invoke MessageBox, 0, val(Total_Memory), ADDR ComputerName, MB_OK
invoke MessageBox, 0, val(Free_Memory), ADDR ComputerName, MB_OK
invoke MessageBox, 0, val(Screen_X), ADDR ComputerName, MB_OK
invoke MessageBox, 0, val(Screen_Y), ADDR ComputerName, MB_OK
invoke MessageBox, 0, ADDR MacAddress, ADDR ComputerName, MB_OK
invoke MessageBox, 0, val(Frequence), ADDR ComputerName, MB_OK
invoke MessageBox, 0, ADDR IpAddress, ADDR ComputerName, MB_OK
;==================
; Leave the program
;==================
push eax ; [in] Exit code for the process and all threads terminated as a result of this call.
call ExitProcess
ret
init proc
.code
; =========
; User name
; =========
mov Buffer, 32
push offset Buffer ; [in, out] On input, this variable specifies the size of the lpBuffer buffer, in TCHARs. On output, the variable receives the number of TCHARs copied to the buffer, including the terminating null character.
push offset UserName ; [out] Pointer to the buffer to receive the null-terminated string containing the user's logon name.
call GetUserName ; If the function succeeds, the return value is a nonzero value(Len of UserName+1)
; =============
; Computer Name
; =============
mov Buffer, 32
push offset Buffer ; [in, out] On input, specifies the size of the buffer, in TCHARs. On output, receives the number of TCHARs copied to the destination buffer, not including the terminating null character.
push offset ComputerName ; [out] Pointer to a buffer that receives a null-terminated string containing the computer name or the cluster virtual server name.
push 0 ; [in] Type of name to retrieve
call GetComputerNameEx ; If the function succeeds, the return value is a nonzero value.
; ============
; Domaine Name
; ============
mov Buffer, 128
push offset Buffer ; [in, out] On input, specifies the size of the buffer, in TCHARs. On output, receives the number of TCHARs copied to the destination buffer, not including the terminating null character.
push offset DomaineName ; [out] Pointer to a buffer that receives a null-terminated string containing the computer name or the cluster virtual server name.
push 2 ; [in] Type of name to retrieve
call GetComputerNameEx ; If the function succeeds, the return value is a nonzero value.
; =================
; Windows Directory
; =================
push MAX_PATH ; [in] Size of the string buffer in TCHARs
push offset WinDirectory ; [out] Pointer to a string buffer that receives the null-terminated string
Call GetWindowsDirectory ; If the function succeeds, the return value is the length of the string copied to the buffer, in TCHARs, not including the terminating null character.
; ================
; System Directory
; ================
push MAX_PATH ; [in] Size of the string buffer in TCHARs
push offset SysDirectory ; [out] Pointer to a string buffer that receives the null-terminated string
Call GetSystemDirectory ; If the function succeeds, the return value is the length of the string copied to the buffer, in TCHARs, not including the terminating null character.
; =================
; Current Directory
; =================
push offset CurDirectory ; [out] Pointer to a string buffer that receives the null-terminated string
push MAX_PATH ; [in] Size of the string buffer in TCHARs
Call GetCurrentDirectory ; If the function succeeds, the return value is the length of the string copied to the buffer, in TCHARs, not including the terminating null character.
; ==============
; Temp Directory
; ==============
push offset TmpDirectory ; [out] Pointer to a string buffer that receives the null-terminated string
push MAX_PATH ; [in] Size of the string buffer in TCHARs
Call GetTempPath ; If the function succeeds, the return value is the length of the string copied to the buffer, in TCHARs, not including the terminating null character.
; =========
; Disk info
; =========
push offset Free_Disk
push offset Total_Disk
push offset INT_64
push offset Disk ; [in]Pointer to a null-terminated string that specifies a directory on the disk. If this parameter is NULL, the function uses the root of the current disk.
call GetDiskFreeSpaceEx ; If the function succeeds, the return value is nonzero.
; ++++++++++++++++
; Total Space Disk
; ++++++++++++++++
mov eax, [Total_Disk+4]
mov ebx, [Total_Disk]
shl eax, 16 ; push high bytes of eax in low bytes
shr ebx, 16 ; push low bytes of ecx in high bytes
add eax, ebx
shr eax, 4 ; 4+16=20 convert octets in mega octect
mov Total_Disk, eax
; +++++++++++++++++++++
; Free disk space Total
; +++++++++++++++++++++
mov eax, [Free_Disk+4]
mov ebx, [Free_Disk]
shl eax, 16 ; push high bytes of eax in low bytes
shr ebx, 16 ; push low bytes of ecx in high bytes
add eax, ebx
shr eax, 4 ; 4+16=20 convert octets in mega octect
mov Free_Disk, eax
; ===========
; Free Memory
; ===========
push OFFSET Memory
call GlobalMemoryStatus
mov eax, Memory.dwTotalPhys ; bytes of physical memory
shr eax, 20 ; convert octect to Mo
mov Total_Memory, eax
mov eax, Memory.dwAvailPhys ; free physical memory bytes
shr eax, 20 ; convert octect to Mo
mov Free_Memory, eax
;==========================================
; Get the Screen resolution
;==========================================
push SM_CXSCREEN ; Width of the screen of the primary display monitor, in pixels.
call GetSystemMetrics ; If the function succeeds, the return value is the requested system metric or configuration setting else zero.
Mov Screen_X, eax
push SM_CYSCREEN ; Height of the screen of the primary display monitor, in pixels.
call GetSystemMetrics ; If the function succeeds, the return value is the requested system metric or configuration setting else zero.
Mov Screen_Y, eax
; =====================
; Scan if mouse present
; =====================
push SM_MOUSEPRESENT ; Scan if mouse is present.
call GetSystemMetrics ; Nonzero if a mouse is installed; zero otherwise.
or eax, eax
jz NoMouse
mov MousePresent, TRUE
NoMouse:
; ===================
; Scan if mouse Wheel
; ===================
push SM_MOUSEWHEELPRESENT ; Scan if mouse Wheel.
call GetSystemMetrics ; Nonzero if a mouse with a wheel is installed; zero otherwise.
or eax, eax
jz NoWheel
mov MouseWhell, TRUE
NoWheel:
; ===============
; GET MAC ADDRESS
; ===============
mov l_NCB.ncb_command, NCBENUM
mov l_NCB.ncb_length, SIZEOF l_ENUM
mov l_NCB.ncb_buffer, OFFSET l_ENUM
; ***************************************************************************************
; The Netbios function interprets and executes the specified network control block (NCB).
; ***************************************************************************************
push OFFSET l_NCB ; Pointer to an NCB structure that describes the network control block.
call Netbios ; For synchronous requests, the return value is the return code of the NCB structure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; The RtlZeroMemory routine fills a block of memory with zeros, given a pointer to the block and the length, in bytes, to be filled.
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
push SIZEOF l_NCB ; Specifies the number of bytes to be zeroed.
push OFFSET l_NCB ; Pointer to the memory to be filled with zeros.
call RtlZeroMemory ; No return
mov l_NCB.ncb_command, NCBRESET
mov esi, OFFSET l_ENUM.lana
mov al, [esi + ecx]
mov l_NCB.ncb_lana_num, al
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; The Netbios function interprets and executes the specified network control block (NCB).
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
push OFFSET l_NCB ; Pointer to an NCB structure that describes the network control block.
call Netbios ; For synchronous requests, the return value is the return code of the NCB structure
mov l_NCB.ncb_command, NCBASTAT
; +++++++++++++++++++++++++++++++++++++++++++++++++
; The lstrcpy function copies a string to a buffer.
; +++++++++++++++++++++++++++++++++++++++++++++++++
push OFFSET String_MacAdd ; [in] Pointer to the null-terminated string to be copied.
push OFFSET l_NCB.ncb_callname ; [out] Pointer to a buffer to receive the contents of the string pointed to by the lpString2 parameter. The buffer must be large enough to contain the string, including the terminating null character.
call lstrcpy ; If the function succeeds, the return value is a pointer to the buffer.
mov l_NCB.ncb_length, SIZEOF l_ASTAT
mov l_NCB.ncb_buffer, OFFSET l_ASTAT
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; The Netbios function interprets and executes the specified network control block (NCB).
; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
push OFFSET l_NCB ; Pointer to an NCB structure that describes the network control block.
call Netbios ; For synchronous requests, the return value is the return code of the NCB structure
; +++++++++++++++++++++++++++++++++++++++++++++++++++++
; 6 byte Binary Conversion to ASCII HEX (12 characters)
; +++++++++++++++++++++++++++++++++++++++++++++++++++++
mov esi, OFFSET l_ASTAT.Adapt.adapter_address
mov edi, OFFSET MacAddress
xor ecx, ecx
xor ebx, ebx
mov cl, 0Bh
mov bl, 05h
bintohex:
mov al, [esi + ebx]
push eax
and al, 00001111b
add al, 90h
daa
adc al, 40h
daa
mov [edi + ecx], al
dec ecx
pop eax
shr al, 4h
and al, 00001111b
add al, 90h
daa
adc al, 40h
daa
mov [edi + ecx], al
dec ebx
dec ecx
jns bintohex
; =======================
; GET Processor Frequence
; =======================
call GetTickCount ; The return value is the number of milliseconds that have elapsed since the system was started.
mov Time, eax ; Time reference
rdtsc ; Number of cycle since boot
shr eax,2 ; for support proccessor more speed than 4 Ghz (4*2^2=16)
mov ebx, eax ; save the result in ebx
time_wait: ; loop since 1, 048 seconds
call GetTickCount; The return value is the number of milliseconds that have elapsed since the system was started.
sub eax, Time ; compare eax with time reference
cmp eax, 1048 ; while time <1.048 seconds (2^20 microseconds)
jl time_wait
rdtsc ; Number of cycle since boot
shr eax,2 ; for support proccessor more speed than 4 Ghz (4*2^2=16)
sub eax, ebx ; Number of cycle in the lap time
shr eax, 18 ; Get ony the Mega cycle (18+2=20)
mov Frequence, eax
; =====================
; GET Processor Feature
; =====================
; ++++++++++++++++++++
; MMX instruction set
; ++++++++++++++++++++
push PF_MMX_INSTRUCTIONS_AVAILABLE
call IsProcessorFeaturePresent
mov MMX_Available, eax
; +++++++++++++++++++
; SSE instruction set
; +++++++++++++++++++
push PF_XMMI_INSTRUCTIONS_AVAILABLE
call IsProcessorFeaturePresent
mov XMMI_Available, eax
; ++++++++++++++++++++++
; 3D-Now instruction set
; ++++++++++++++++++++++
push PF_3DNOW_INSTRUCTIONS_AVAILABLE
call IsProcessorFeaturePresent
mov D3_Available, eax
; ==============
; Get IP Address
; ==============
push offset IpAddress ; [out] Pointer to the WSADATA data structure that is to receive details of the Windows Sockets implementation.
push 202h ; [in] Highest version of Windows Sockets support that the caller can use.
call WSAStartup ; function returns zero if successful. Otherwise, it returns one of the error codes listed in the following.
push offset ComputerName ; [in] Pointer to the null-terminated name of the host to resolve.
call gethostbyname ; If no error occurs, gethostbyname returns a pointer to the hostent structure.
mov ecx, [eax] + 12 ; h_addr_list of the hostent structure.
mov ebx, [ecx]
mov eax, [ebx]
mov ebx, offset IpAddress
push eax ; Pointer to an in_addr structure that represents an Internet host address.
call inet_ntoa ; The inet_ntoa function converts an (Ipv4) Internet network address into a string in Internet standard dotted format.
iploop:
mov cl, [eax]
mov [ebx], cl
inc eax
inc ebx
test cl, cl
jnz iploop
ret
init endp
end start
Historique
- 22 mars 2005 20:53:41 :
- j'ai fait quelques correctifs de la source, celle ci fait parti d'un projet que j'ai commencé. Certaines declaration ne sont pas necessaire a l'heure actuelle
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE?COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE? par Matthieu MEZIL
Avec EF, les vues doivent être mappées sur des entity types. Le problème c'est que les entity types doivent avoir une clé. Avec EF, nous avons les complex type qui n'ont pas de clé mais les vues ne peuvent pas être mappées dessus. Avec EF4, il est possibl...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL?[WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL? par JeremyJeanson
Certain d'entre vous on peut être vécu cette situation embarrassante après quelques temps passer avec WF4 : Au début avec mon " ActivityDesigner" , tout allait bien. Et puis un jour j'ai au des problèmes de " Binding" . Alors nous sommes allé sur le site ...
Cliquez pour lire la suite de l'article par JeremyJeanson MYTIC - SHAREPOINT 2010 : DéJà UN MYTHE MICROSOFT ?MYTIC - SHAREPOINT 2010 : DéJà UN MYTHE MICROSOFT ? par junarnoalg
La prochaine session de MyTIC aura lieu à Namur, le 23 mars prochain. Pendant presque une heure, nous parlerons de SharePoint 2010. Voici un aperçu du programme.
Accueil : 17h30 Début de la session : 18h00 - Les nouvelles int...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
RE : ASSEMBLEURRE : ASSEMBLEUR par solleil
Cliquez pour lire la suite par solleil RE : ASSEMBLEURRE : ASSEMBLEUR par ghuysmans99
Cliquez pour lire la suite par ghuysmans99 RE : ASSEMBLEURRE : ASSEMBLEUR par ghuysmans99
Cliquez pour lire la suite par ghuysmans99
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|