Copying files to pda: Difference between revisions
From NSIS Wiki
Jump to navigationJump to search
No edit summary |
(Added indentation to code.) |
||
Line 6: | Line 6: | ||
<highlight-nsis> | <highlight-nsis> | ||
Function createSettingsFile | Function createSettingsFile | ||
;Init RAPI | ;Init RAPI | ||
;---------------------- | ;---------------------- | ||
;Dll Call Structure | ;Dll Call Structure | ||
; | ; | ||
;HRESULT CeRapiInit(void); | ;HRESULT CeRapiInit(void); | ||
System::Call "rapi::CeRapiInit() i .r0" | System::Call "rapi::CeRapiInit() i .r0" | ||
;Create the file on the PDA | ;Create the file on the PDA | ||
;---------------------- | ;---------------------- | ||
;Dll Call Structure | ;Dll Call Structure | ||
; | ; | ||
;HANDLE CeCreateFile( | ;HANDLE CeCreateFile( | ||
; LPCWSTR lpFileName, | ; LPCWSTR lpFileName, | ||
; DWORD dwDesiredAccess, | ; DWORD dwDesiredAccess, | ||
; DWORD dwShareMode, | ; DWORD dwShareMode, | ||
; LPSECURITY_ATTRIBUTES lpSecurityAttributes, | ; LPSECURITY_ATTRIBUTES lpSecurityAttributes, | ||
; DWORD dwCreationDisposition, | ; DWORD dwCreationDisposition, | ||
; DWORD dwFlagsAndAttributes, | ; DWORD dwFlagsAndAttributes, | ||
; HANDLE hTemplateFile | ; HANDLE hTemplateFile | ||
;); | ;); | ||
; | ; | ||
; Access Mode Values : | ; Access Mode Values : | ||
; GENERIC_READ = 0x80000000; | ; GENERIC_READ = 0x80000000; | ||
; GENERIC_WRITE = 0x40000000; | ; GENERIC_WRITE = 0x40000000; | ||
; | ; | ||
; Creation Disposition Value : | ; Creation Disposition Value : | ||
; CREATE_NEW = 1; | ; CREATE_NEW = 1; | ||
; CREATE_ALWAYS = 2; | ; CREATE_ALWAYS = 2; | ||
; OPEN_EXISTING = 3; | ; OPEN_EXISTING = 3; | ||
; | ; | ||
; Flag and attribute values | ; Flag and attribute values | ||
; FILE_ATTRIBUTE_NORMAL = 0x80; | ; FILE_ATTRIBUTE_NORMAL = 0x80; | ||
; FILE_ATTRIBUTE_DIRECTORY = 0x10; | ; FILE_ATTRIBUTE_DIRECTORY = 0x10; | ||
; FILE_ATTRIBUTE_TEMPORARY = 0x100; | ; FILE_ATTRIBUTE_TEMPORARY = 0x100; | ||
System::Call "rapi::CeCreateFile(w '\filename.txt', i 0x80000000|0x40000000, i 0, i 0, i 2, i 0x80, i 0) i .r10" | System::Call "rapi::CeCreateFile(w '\filename.txt', i 0x80000000|0x40000000, i 0, i 0, i 2, i 0x80, i 0) i .r10" | ||
;Write your data across. Can be done in a loop etc. | ;Write your data across. Can be done in a loop etc. | ||
FileOpen $0 'FileName' r | FileOpen $0 'FileName' r | ||
IfErrors done | IfErrors done | ||
FileRead $0 $1 | FileRead $0 $1 | ||
;Get the | ;Get the length of the string read | ||
StrLen $2 $1 | StrLen $2 $1 | ||
;---------------------- | ;---------------------- | ||
;Dll Call Structure | ;Dll Call Structure | ||
; | ; | ||
;BOOL CeWriteFile( | ;BOOL CeWriteFile( | ||
; HANDLE hFile, | ; HANDLE hFile, | ||
; LPCVOID lpBuffer, | ; LPCVOID lpBuffer, | ||
; DWORD nNumberOfBytesToWrite, | ; DWORD nNumberOfBytesToWrite, | ||
; LPDWORD lpNumberOfBytesWritten, | ; LPDWORD lpNumberOfBytesWritten, | ||
; LPOVERLAPPED lpOverlapped | ; LPOVERLAPPED lpOverlapped | ||
;); | ;); | ||
System::Call "rapi::CeWriteFile(i r10., t r1, i r2, i 0, i 0) i .r11" | System::Call "rapi::CeWriteFile(i r10., t r1, i r2, i 0, i 0) i .r11" | ||
;---------------------- | ;---------------------- | ||
;Dll Call Structure | ;Dll Call Structure | ||
; | ; | ||
;BOOL CeCloseHandle( | ;BOOL CeCloseHandle( | ||
; HANDLE hObject | ; HANDLE hObject | ||
;); | ;); | ||
done: | done: | ||
;Close the file on the PDA | ;Close the file on the PDA | ||
System::Call "rapi::CeCloseHandle(i r10) i .r1" | System::Call "rapi::CeCloseHandle(i r10) i .r1" | ||
;Close the local file | ;Close the local file | ||
FileClose $0 | FileClose $0 | ||
System::Free 0 | |||
FunctionEnd | FunctionEnd | ||
</highlight-nsis> | </highlight-nsis> |
Revision as of 10:40, 16 October 2005
Description
This script shows you how to "copy" a file from a desktop machine to a PDA using RAPI. This can be used to copy files other than .cab files. There are better ways to install cab files on a PDA, using CeAppMgr. To use this function you require the rapi.dll, which is installed along with ActiveSync.
The Function
Function createSettingsFile ;Init RAPI ;---------------------- ;Dll Call Structure ; ;HRESULT CeRapiInit(void); System::Call "rapi::CeRapiInit() i .r0" ;Create the file on the PDA ;---------------------- ;Dll Call Structure ; ;HANDLE CeCreateFile( ; LPCWSTR lpFileName, ; DWORD dwDesiredAccess, ; DWORD dwShareMode, ; LPSECURITY_ATTRIBUTES lpSecurityAttributes, ; DWORD dwCreationDisposition, ; DWORD dwFlagsAndAttributes, ; HANDLE hTemplateFile ;); ; ; Access Mode Values : ; GENERIC_READ = 0x80000000; ; GENERIC_WRITE = 0x40000000; ; ; Creation Disposition Value : ; CREATE_NEW = 1; ; CREATE_ALWAYS = 2; ; OPEN_EXISTING = 3; ; ; Flag and attribute values ; FILE_ATTRIBUTE_NORMAL = 0x80; ; FILE_ATTRIBUTE_DIRECTORY = 0x10; ; FILE_ATTRIBUTE_TEMPORARY = 0x100; System::Call "rapi::CeCreateFile(w '\filename.txt', i 0x80000000|0x40000000, i 0, i 0, i 2, i 0x80, i 0) i .r10" ;Write your data across. Can be done in a loop etc. FileOpen $0 'FileName' r IfErrors done FileRead $0 $1 ;Get the length of the string read StrLen $2 $1 ;---------------------- ;Dll Call Structure ; ;BOOL CeWriteFile( ; HANDLE hFile, ; LPCVOID lpBuffer, ; DWORD nNumberOfBytesToWrite, ; LPDWORD lpNumberOfBytesWritten, ; LPOVERLAPPED lpOverlapped ;); System::Call "rapi::CeWriteFile(i r10., t r1, i r2, i 0, i 0) i .r11" ;---------------------- ;Dll Call Structure ; ;BOOL CeCloseHandle( ; HANDLE hObject ;); done: ;Close the file on the PDA System::Call "rapi::CeCloseHandle(i r10) i .r1" ;Close the local file FileClose $0 System::Free 0 FunctionEnd
Basically it initialises RAPI, creates the file on the PDA, reads from the local file and writes the the file on the PDA!