Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2783 clevermous 1
format PE GUI 4.0
2
section '.text' code readable executable
3
entry start
4
start:
5
	push	ebp
6
	mov	ebp, info
7
	xor	ebx, ebx
8
; set current directory to exe dir
9
	push	300
10
	push	ebp
11
	push	ebx
12
	call	[GetModuleFileNameA]
13
	lea	edi, [ebp+eax]
14
	xchg	eax, ecx
15
	mov	al, '\'
16
	std
17
	repnz	scasb
18
	cld
19
	jz	@f
20
	pop	ebp
21
	ret
22
@@:
23
	mov	byte [edi+1], bl
24
	push	ebp
25
	call	[SetCurrentDirectoryA]
26
; parse command line
27
	call	[GetCommandLineA]
28
	xchg	eax, esi
29
; skip leading spaces
30
@@:
31
	lodsb
32
	cmp	al, 0
33
	jz	cmdlineend
34
	cmp	al, ' '
35
	jbe	@b
36
	cmp	al, '"'
37
	jz	p
38
; skip EXE name
39
@@:
40
	lodsb
41
	cmp	al, ' '
42
	ja	@b
43
	dec     esi
44
	jmp	q
45
p:
46
	lodsb
47
	cmp	al, 0
48
	jz	cmdlineend
49
	cmp	al, '"'
50
	jnz	p
51
q:
52
; skip leading spaces
53
	lodsb
54
	cmp	al, 0
55
	jz	cmdlineend
56
	cmp	al, ' '
57
	jbe	q
58
	dec	esi
59
; now esi points to 1st argument
60
	jmp	@f
61
cmdlineend:
62
	mov	esi, def
63
@@:
64
	mov	al, 'c'
65
	cmp	byte [esi+1], ':'
66
	jnz	@f
67
	lodsb
68
	inc	esi
69
@@:
70
	mov	[ebp], al
71
	lodsb
72
	cmp	al, '\'
73
	jz	paramsok
74
usage:
75
	mov	esi, usagemsg
76
	jmp	failmsg
77
paramsok:
78
	cmp	byte [esi], '\'
79
	jz	usage
80
	mov	edi, esi
81
	mov	al, 0
82
	xor	ecx, ecx
83
	dec	ecx
84
	repnz	scasb
85
	not	ecx
86
	cmp	ecx, 290
87
	jae	usage
88
	lea	edi, [ebp+1]
89
	cmp     ecx, 1
90
	rep	movsb
91
	jz      copydefname
92
	cmp	byte [edi-2], '\'
93
	jnz	namegiven
94
copydefname:
95
	dec	edi
96
	mov	ecx, defnamesz
97
	mov	esi, defname
98
	rep	movsb
99
namegiven:
100
	push	ebx		; hTemplateFile
101
;	push	0x04000000	; dwFlagsAndAttributes = FILE_FLAG_DELETE_ON_CLOSE
102
	push	ebx
103
	push	ebx		; dwCreationDisposition
104
	push	ebx		; lpSecurityAttributes
105
	push	ebx		; dwShareMode
106
	push	ebx		; dwDesiredAccess
107
	push	name		; lpFileName
108
	call	[CreateFileA]
109
	inc	eax
110
	mov	esi, errmsg
111
	jz	failmsg
112
	dec	eax
113
	push	ebx
114
	push	ebx
115
	push	ebx
116
	push	ebx
117
	sub	edi, ebp
118
	push	edi
119
	push	ebp
120
	push	0Fh
121
	push	eax
122
	call	[DeviceIoControl]
123
	test	eax, eax
124
	mov	esi, errmsg2
125
	jz	failmsg
126
	push	ebx
127
	push	2		; EWX_REBOOT
128
	call	[ExitWindowsEx]
129
	pop	ebp
130
	ret
131
failmsg:
132
	push	ebx
133
	push	ebx
134
	push	esi
135
	push	ebx
136
	call	[MessageBoxA]
137
	pop	ebp
138
	ret
139
 
140
align 4
141
data import
142
	dd	0,0,0
143
	dd	rva kernel32_name
144
	dd	rva kernel32_thunks
145
	dd	0,0,0
146
	dd	rva user32_name
147
	dd	rva user32_thunks
148
	dd	0,0,0,0,0
149
kernel32_thunks:
150
CreateFileA	dd	rva CreateFileA_thunk
151
CloseHandle	dd	rva CloseHandle_thunk
152
DeviceIoControl	dd	rva DeviceIoControl_thunk
153
GetCommandLineA	dd	rva GetCommandLineA_thunk
154
SetCurrentDirectoryA dd	rva SetCurrentDirectoryA_thunk
155
GetModuleFileNameA dd	rva GetModuleFileNameA_thunk
156
	dd	0
157
user32_thunks:
158
MessageBoxA	dd	rva MessageBoxA_thunk
159
ExitWindowsEx	dd	rva ExitWindowsEx_thunk
160
	dw	0
161
CreateFileA_thunk:
162
	dw	0
163
	db	'CreateFileA'
164
CloseHandle_thunk:
165
	dw	0
166
	db	'CloseHandle'
167
DeviceIoControl_thunk:
168
	dw	0
169
	db	'DeviceIoControl'
170
GetCommandLineA_thunk:
171
	dw	0
172
	db	'GetCommandLineA'
173
SetCurrentDirectoryA_thunk:
174
	dw	0
175
	db	'SetCurrentDirectoryA'
176
GetModuleFileNameA_thunk:
177
	dw	0
178
	db	'GetModuleFileNameA'
179
MessageBoxA_thunk:
180
	dw	0
181
	db	'MessageBoxA'
182
ExitWindowsEx_thunk:
183
	dw	0
184
	db	'ExitWindowsEx',0
185
kernel32_name	db	'kernel32.dll',0
186
user32_name	db	'user32.dll',0
187
end data
188
 
189
section '.data' data readable writable
190
data resource from 'klbrico.res'
191
end data
192
 
193
name	db	'\\.\'
194
vxdfilename db	'ldklbr.vxd',0
195
errmsg	db	'Cannot load driver',0
196
errmsg2	db	'Invalid parameter',0
197
usagemsg db	'Usage: 9x2klbr [[drive:]\[path\][imagename]]',0
198
def	db	'\'
199
defname	db	'kolibri.img',0
200
defnamesz = $ - defname
201
 
202
info	rb	300