Assembly code snippets

Back to the snippets overview

Details

TitleExtract File from Resources
AuthorPone
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

; #########################################################################