Assembly code snippets
Details
Title | Extract File from Resources |
---|---|
Author | Pone |
Submitted by: | Pone |
Date added: | 2002-06-28 22:20:55 |
Date modified: | 2002-06-28 22:20:55 |
Comments
This code permits you to extract files from your resource file.
Snippet
; #########################################################################
;USAGE
szResMarker db "BINFILE",0
szResourceName db "My_File",0
szDestination db "MyReadMe.txt",0
invoke ResExtractFile,hInstance,addr szResourceName,addr szResMarker,addr szDestination
;Line in Resource File
;My_File BINFILE Readme.txt
; #########################################################################
ResExtractFile proc hInst:DWORD, Resource:DWORD, ResMarker:DWORD, Destination:DWORD
LOCAL hRsrc:DWORD
LOCAL hResource:DWORD
LOCAL dwResSize:DWORD
LOCAL hFile:DWORD
LOCAL dwWritten:DWORD
LOCAL lpfResource:DWORD
invoke FindResource,hInst,Resource,ResMarker
.if eax == NULL
not eax
.else
mov hRsrc,eax
invoke LoadResource,hInst,hRsrc
.if eax == NULL
not eax
.else
mov hResource,eax
invoke SizeofResource,hInst,hRsrc
mov dwResSize,eax
invoke LockResource,hResource
mov lpfResource,eax
;Currently setup to overwrite, if present.
invoke CreateFile,Destination,GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL
.if eax == INVALID_HANDLE_VALUE
;User can use GetLastError
.else ;File is present.
mov hFile, eax
invoke WriteFile,hFile,lpfResource,dwResSize,ADDR dwWritten,NULL
mov eax,dwResSize
.if eax == dwWritten
invoke CloseHandle,hFile
mov eax,ERROR_SUCCESS
.else
invoke DeleteFile,Destination
mov eax,-2
.endif
.endif
.endif
.endif
ret
ResExtractFile endp
; #########################################################################
;USAGE
szResMarker db "BINFILE",0
szResourceName db "My_File",0
szDestination db "MyReadMe.txt",0
invoke ResExtractFile,hInstance,addr szResourceName,addr szResMarker,addr szDestination
;Line in Resource File
;My_File BINFILE Readme.txt
; #########################################################################
ResExtractFile proc hInst:DWORD, Resource:DWORD, ResMarker:DWORD, Destination:DWORD
LOCAL hRsrc:DWORD
LOCAL hResource:DWORD
LOCAL dwResSize:DWORD
LOCAL hFile:DWORD
LOCAL dwWritten:DWORD
LOCAL lpfResource:DWORD
invoke FindResource,hInst,Resource,ResMarker
.if eax == NULL
not eax
.else
mov hRsrc,eax
invoke LoadResource,hInst,hRsrc
.if eax == NULL
not eax
.else
mov hResource,eax
invoke SizeofResource,hInst,hRsrc
mov dwResSize,eax
invoke LockResource,hResource
mov lpfResource,eax
;Currently setup to overwrite, if present.
invoke CreateFile,Destination,GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL
.if eax == INVALID_HANDLE_VALUE
;User can use GetLastError
.else ;File is present.
mov hFile, eax
invoke WriteFile,hFile,lpfResource,dwResSize,ADDR dwWritten,NULL
mov eax,dwResSize
.if eax == dwWritten
invoke CloseHandle,hFile
mov eax,ERROR_SUCCESS
.else
invoke DeleteFile,Destination
mov eax,-2
.endif
.endif
.endif
.endif
ret
ResExtractFile endp
; #########################################################################