The MASM Forum Archive 2004 to 2012

General Forums => The Campus => Topic started by: correy on December 13, 2010, 04:40:33 AM

Title: EnumDeviceDrivers.asm
Post by: correy on December 13, 2010, 04:40:33 AM
;本文改编自masm32v10的一个程序。
;相关的api资料在windows的win32.hlp里面没有找到。

.386
.model flat,stdcall
option casemap:none
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include psapi.inc
includelib psapi.lib

.data
correy db "made by correy",0
spaces db "        ",0
nowindowstitle db "没有窗口标题!",0
entry db 13,10
outtitle db "按回车键退出!",0

.data?
paths db 512 dup (?)
x dd ?
buffer db 512 dup (?)
hstdin dd ?
hstdout dd ?

.code
start:
invoke GetStdHandle,-10
mov hstdin,eax
invoke GetStdHandle,-11
mov hstdout,eax
    invoke EnumDeviceDrivers,0,0,ADDR x
    invoke EnumDeviceDrivers,addr paths,x,ADDR x
    shr x, 2
    lea esi,paths
  again:
    invoke GetDeviceDriverFileName,[esi],addr buffer,512
    invoke lstrlen,addr buffer
    invoke WriteFile,hstdout,addr buffer,eax,0,0
    invoke WriteFile,hstdout,addr entry,2,0,0
    add esi, 4
    sub x, 1
    cmp x,0
    jne again
   
invoke WriteFile,hstdout,addr outtitle,sizeof outtitle,0,0
invoke ReadFile,hstdin,addr buffer,sizeof buffer,addr x,0
ret
end start
;made at 2010.08.28
Title: Re: EnumDeviceDrivers.asm
Post by: jj2007 on December 13, 2010, 09:44:36 AM
Your code works perfectly, thanks.
Welcome to the forum, correy :U

P.S.: You should full paths without the drive letter as shown below, since some people do not set environment variables, for various reasons.
include \masm32\include\masm32rt.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\psapi.inc
includelib \masm32\lib\psapi.lib
Title: Re: EnumDeviceDrivers.asm
Post by: japheth on December 13, 2010, 09:45:11 AM
Good work!

However, variable paths can receive 512 / 4 = 128 entries only. That might be too small. Worse, your program does not care about a buffer overflow.

Here's a slightly modified version:


.386
.model flat,stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\psapi.inc

includelib kernel32.lib
includelib psapi.lib

.code

main proc

local hstdout:dword
local tabsiz:dword
local dwWritten:dword
local buffer[512]:byte

invoke GetStdHandle,STD_OUTPUT_HANDLE
mov hstdout,eax
invoke EnumDeviceDrivers, 0, 0, ADDR tabsiz
sub esp, tabsiz
mov esi, esp
push 0
invoke EnumDeviceDrivers, esi, tabsiz, esp
pop ecx
shr ecx,2
again:
push ecx
invoke GetDeviceDriverFileName, [esi], addr buffer, sizeof buffer
add esi, 4
invoke lstrlen, addr buffer
mov word ptr [buffer+eax], 0A0Dh
add eax,2
lea ecx, dwWritten
invoke WriteFile, hstdout, addr buffer, eax, ecx, 0
pop ecx
loop again
add esp,tabsiz
ret
main endp

start:
call main
invoke ExitProcess, 0

end start


Note that it still may crash if the buffer space exceeds 4096 bytes.
Title: Re: EnumDeviceDrivers.asm
Post by: Magnum on December 13, 2010, 12:26:51 PM
Quote from: correy on December 13, 2010, 04:40:33 AM
;本文改编自masm32v10的一个程序。
;相关的api资料在windows的win32.hlp里面没有找到。

.data
correy db "made by correy",0
spaces db "        ",0
nowindowstitle db "没有窗口标题!",0
entry db 13,10
outtitle db "按回车键退出!",0


Are those Chinese characters?

How do you get them on your screen?

Title: Re: EnumDeviceDrivers.asm
Post by: dedndave on December 13, 2010, 12:29:29 PM
not Chinese - Martian   :P

welcome to the forum, Correy  :U

(Andy - unicode text)
Title: Re: EnumDeviceDrivers.asm
Post by: Magnum on December 13, 2010, 12:38:02 PM
Thanks "Mr. Terse."  :bg

I would like to learn how to use Unicode to output Korean text.



Title: Re: EnumDeviceDrivers.asm
Post by: Farabi on December 14, 2010, 12:45:16 AM
フォーラムへようこそ
Title: Re: EnumDeviceDrivers.asm
Post by: Farabi on December 14, 2010, 12:48:21 AM
Quote from: Magnum on December 13, 2010, 12:38:02 PM
Thanks "Mr. Terse."  :bg

I would like to learn how to use Unicode to output Korean text.





It simple, use CreateWindowExW for the richedit control
Title: Re: EnumDeviceDrivers.asm
Post by: correy on December 14, 2010, 04:58:11 AM
thanks all.
i come from Chinese.