aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Portable/pmp_activesync
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Plugins/Portable/pmp_activesync
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/Plugins/Portable/pmp_activesync')
-rw-r--r--Src/Plugins/Portable/pmp_activesync/ASDevice.cpp798
-rw-r--r--Src/Plugins/Portable/pmp_activesync/ASDevice.h172
-rw-r--r--Src/Plugins/Portable/pmp_activesync/activesync/Inc/IRAPIStream.h286
-rw-r--r--Src/Plugins/Portable/pmp_activesync/activesync/Inc/rapi.h118
-rw-r--r--Src/Plugins/Portable/pmp_activesync/activesync/Inc/rapi2.h3090
-rw-r--r--Src/Plugins/Portable/pmp_activesync/activesync/Inc/rapitypes.h445
-rw-r--r--Src/Plugins/Portable/pmp_activesync/activesync/Inc/rapitypes2.h248
-rw-r--r--Src/Plugins/Portable/pmp_activesync/activesync/Lib/rapiuuid.libbin0 -> 4964 bytes
-rw-r--r--Src/Plugins/Portable/pmp_activesync/main.cpp220
-rw-r--r--Src/Plugins/Portable/pmp_activesync/pmp_activesync.rc116
-rw-r--r--Src/Plugins/Portable/pmp_activesync/pmp_activesync.sln18
-rw-r--r--Src/Plugins/Portable/pmp_activesync/pmp_activesync.vcxproj357
-rw-r--r--Src/Plugins/Portable/pmp_activesync/pmp_activesync.vcxproj.filters51
-rw-r--r--Src/Plugins/Portable/pmp_activesync/resource.h31
-rw-r--r--Src/Plugins/Portable/pmp_activesync/resources/activeSyncIcon.pngbin0 -> 246 bytes
-rw-r--r--Src/Plugins/Portable/pmp_activesync/version.rc239
16 files changed, 5989 insertions, 0 deletions
diff --git a/Src/Plugins/Portable/pmp_activesync/ASDevice.cpp b/Src/Plugins/Portable/pmp_activesync/ASDevice.cpp
new file mode 100644
index 00000000..42d6ccfd
--- /dev/null
+++ b/Src/Plugins/Portable/pmp_activesync/ASDevice.cpp
@@ -0,0 +1,798 @@
+#include "ASDevice.h"
+#include <vector>
+
+static void removebadchars(wchar_t *s) {
+ while (s && *s)
+ {
+ if (*s == L'?' || *s == L'/' || *s == L'\\' || *s == L':' || *s == L'*' || *s == L'\"' || *s == L'<' || *s == L'>' || *s == L'|')
+ *s = L'_';
+ s = CharNextW(s);
+ }
+}
+
+Playlist::Playlist(const wchar_t * path, LPCE_FIND_DATA f) {
+ _snwprintf(fn,MAX_PATH,L"%s\\%s",path,f->cFileName);
+ wchar_t * ext = wcsrchr(f->cFileName,L'.');
+ if(ext) *ext=0;
+ lstrcpyn(name,f->cFileName,fieldlen);
+}
+
+Playlist::Playlist(const wchar_t * name0) {
+ lstrcpyn(name,name0,fieldlen);
+ fn[0]=0;
+}
+
+#define ASSIGNLARGE(r,h,l) {ULARGE_INTEGER li; li.HighPart = h; li.LowPart = l; r=li.QuadPart;}
+
+Song::Song(const wchar_t * path0, LPCE_FIND_DATA f, bool video) : track(-1), video(video) {
+ artist[0]=album[0]=title[0]=fn[0]=0;
+
+ ASSIGNLARGE(size,f->nFileSizeHigh,f->nFileSizeLow);
+ // first, fill in artist and album
+ wchar_t *path = _wcsdup(path0);
+ wchar_t *a = wcsrchr(path,L'\\');
+ if(a && a-1 != path) {
+ lstrcpyn(album,a+1,fieldlen);
+ *a=0;
+ a = wcsrchr(path,L'\\');
+ if(a && a-1 != path) lstrcpyn(artist,a+1,fieldlen);
+ }
+ // now parse out the title
+ _snwprintf(fn,MAX_PATH,L"%s\\%s",path0,f->cFileName);
+ wchar_t * ext = wcsrchr(f->cFileName,L'.');
+ if(ext) *ext=0;
+ wchar_t * p = f->cFileName;
+ if(memcmp(artist,p,wcslen(artist)*sizeof(wchar_t))==0) p+=wcslen(artist);
+ while(p && *p && (*p==L'.' || *p==L'_' || *p==L'-' || *p==L' ')) p++;
+ track = wcstoul(p,&p,10);
+ while(p && *p && (*p==L'.' || *p==L'_' || *p==L'-' || *p==L' ')) p++;
+ lstrcpyn(title,p,fieldlen);
+ if(title[0]==0) lstrcpyn(title,f->cFileName,fieldlen);
+ free(path);
+}
+
+Song::Song() : video(false) {}
+
+void ASDevice::Find(const wchar_t * path) {
+ wchar_t fpath[MAX_PATH] = {0};
+ wsprintf(fpath,L"%s\\*",path);
+ CE_FIND_DATA f = {0};
+ HANDLE h = pISession->CeFindFirstFile(fpath,&f);
+ if(h == INVALID_HANDLE_VALUE) return;
+ do {
+ if(f.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
+ wchar_t path2[MAX_PATH] = {0};
+ wsprintf(path2,L"%s\\%s",path,f.cFileName);
+ Find(path2);
+ }
+ else FoundFile(path,&f);
+ } while(pISession->CeFindNextFile(h,&f));
+ pISession->CeFindClose(h);
+}
+
+void ASDevice::FoundFile(const wchar_t * path, LPCE_FIND_DATA f) {
+ wchar_t * ext = wcsrchr(f->cFileName,L'.');
+ if(!_wcsicmp(ext,L".mp3") || !_wcsicmp(ext,L".wma"))
+ playlists[0]->songs.push_back(new Song(path,f,false));
+ if(!_wcsicmp(ext,L".avi") || !_wcsicmp(ext,L".wmv") || !_wcsicmp(ext,L".asf") || !_wcsicmp(ext,L".mpg") || !_wcsicmp(ext,L".mpeg"))
+ playlists[0]->songs.push_back(new Song(path,f,true));
+ else if(!_wcsicmp(ext,L".asx"))
+ playlists.push_back(new Playlist(path,f));
+}
+
+void fixTagsForXML(wchar_t* dest, const wchar_t *cstr, const int len)
+{
+ int tindex = 0;
+ wchar_t *temp = (wchar_t*)calloc(len, sizeof(wchar_t));
+ for(int i=0;i<len && tindex<len;i++)
+ {
+ switch(cstr[i])
+ {
+ case(L'&'):
+ if(tindex < len-5)
+ {
+ temp[tindex++] = '&';
+ temp[tindex++] = 'a';
+ temp[tindex++] = 'm';
+ temp[tindex++] = 'p';
+ temp[tindex] = ';';
+ }
+ else temp[tindex] = ' '; //no room
+ break;
+ case(L'<'):
+ {
+ if(tindex < len-4)
+ {
+ temp[tindex++] = '&';
+ temp[tindex++] = 'l';
+ temp[tindex++] = 't';
+ temp[tindex] = ';';
+ }
+ else temp[tindex] = ' '; //no room
+ break;
+ }
+ case(L'>'):
+ {
+ if(tindex < len-4)
+ {
+ temp[tindex++] = '&';
+ temp[tindex++] = 'g';
+ temp[tindex++] = 't';
+ temp[tindex] = ';';
+ }
+ else temp[tindex] = ' '; //no room
+ break;
+ }
+ case(L'\"'):
+ {
+ if(tindex < len-4)
+ {
+ temp[tindex++] = '&';
+ temp[tindex++] = 'q';
+ temp[tindex++] = 'u';
+ temp[tindex++] = 'o';
+ temp[tindex++] = 't';
+ temp[tindex] = ';';
+ }
+ else temp[tindex] = ' '; //no room
+ break;
+ }
+ case(L'\''):
+ {
+ if(tindex < len-4)
+ {
+ temp[tindex++] = '&';
+ temp[tindex++] = 'a';
+ temp[tindex++] = 'p';
+ temp[tindex++] = 'o';
+ temp[tindex++] = 's';
+ temp[tindex] = ';';
+ }
+ else temp[tindex] = ' '; //no room
+ break;
+ }
+ default:
+ {
+ temp[tindex] = cstr[i];
+ break;
+ }
+ }
+ if(cstr[i] == 0) break;
+ tindex++;
+ }
+ wcsncpy(dest, temp, len);
+ free(temp);
+}
+
+void ASDevice::WritePlaylist(Playlist * pl) {
+#define CePutws(x,h) pISession->CeWriteFile(h,x,(DWORD)wcslen(x)*sizeof(wchar_t),&w,NULL)
+#define CePuts(x,h) pISession->CeWriteFile(h,x,(DWORD)strlen(x)*sizeof(char),&w,NULL)
+ HANDLE h = pISession->CeCreateFile(pl->fn,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,TRUNCATE_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
+ if(h == INVALID_HANDLE_VALUE) return;
+ std::vector<Song*> *songs = &pl->songs;
+ int l=(int)songs->size();
+ DWORD w;
+ CePuts("<asx version=\"3.0\">\r\n",h);
+ for(int j=0; j<l; j++) {
+ CePuts("<entry><ref href=\"",h);
+ wchar_t safe[fieldlen*2] = {0};
+ fixTagsForXML(safe,songs->at(j)->fn,sizeof(safe)/sizeof(wchar_t));
+ AutoChar fn(safe);
+ CePuts(fn,h);
+ CePuts("\"/></entry>\r\n",h);
+ }
+ CePuts("</asx>",h);
+ pISession->CeCloseHandle(h);
+#undef CePutws
+#undef CePuts
+}
+
+struct mplSearch { bool operator()(Song*& a,Song*& b) { return _wcsicmp(a->fn,b->fn)<0; } };
+struct mplSearch2 { bool operator()(Song*& a,Song* b) { return _wcsicmp(a->fn,b->fn)<0; } };
+
+waServiceFactory *parserFactory;
+
+class plread : public ifc_xmlreadercallback {
+public:
+ Playlist * pl;
+ Playlist * mpl;
+ plread(Playlist * pl,Playlist * mpl) : pl(pl),mpl(mpl) {}
+ void StartTag(const wchar_t *xmlpath, const wchar_t *xmltag, ifc_xmlreaderparams *params) {
+ if(!wcscmp(xmlpath,L"ASX\fENTRY\fREF")) {
+ const wchar_t* path = params->getItemValue(L"HREF");
+ int l= (int)mpl->songs.size();
+ Song s;
+ lstrcpyn(s.fn,path,MAX_PATH);
+ std::vector<Song*>::iterator p = std::lower_bound(mpl->songs.begin(),mpl->songs.end(),&s,mplSearch2());
+ int f = (int)(p - mpl->songs.begin());
+ if(f >= 0 && f < (int)mpl->songs.size()) {
+ Song * found = mpl->songs[f];
+ if(!_wcsicmp(found->fn,s.fn)) pl->songs.push_back(found);
+ }
+ }
+ }
+ RECVS_DISPATCH;
+};
+
+#define CBCLASS plread
+START_DISPATCH;
+VCB(ONSTARTELEMENT, StartTag)
+END_DISPATCH;
+#undef CBCLASS
+
+void ASDevice::ReadPlaylist(Playlist * pl) {
+ if(!parserFactory) return;
+ obj_xml * parser = (obj_xml *)parserFactory->getInterface();
+ if(!parser) return;
+ HANDLE h = pISession->CeCreateFile(pl->fn,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
+ if(h == INVALID_HANDLE_VALUE) { parserFactory->releaseInterface(parser); return; }
+
+ plread cb(pl,playlists[0]);
+ parser->xmlreader_open();
+ parser->xmlreader_registerCallback(L"ASX\fENTRY\f*",&cb);
+
+ for(;;) {
+ char buf[32768] = {0};
+ DWORD read = 0;
+ pISession->CeReadFile(h,buf,sizeof(buf),&read,NULL);
+ if(read == 0) break;
+ parser->xmlreader_feed(buf,read);
+ }
+
+ parserFactory->releaseInterface(parser);
+ pISession->CeCloseHandle(h);
+}
+
+static void findStorageCard(IRAPISession *pISession,wchar_t *storageCard) {
+ ULARGE_INTEGER fa={0},rootTotal={0},ft={0};
+ pISession->CeGetDiskFreeSpaceEx(L"\\",&fa,&rootTotal,&ft);
+
+ wchar_t *fpath = L"\\*";
+ CE_FIND_DATA f;
+ HANDLE h = pISession->CeFindFirstFile(fpath,&f);
+ if(h == INVALID_HANDLE_VALUE) return;
+ do {
+ if(f.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY/* && wcscmp(f.cFileName,L"Storage Card")*/) {
+ ULARGE_INTEGER folderTotal={0};
+ wchar_t path[MAX_PATH] = L"\\";
+ wcscat(path,f.cFileName);
+ pISession->CeGetDiskFreeSpaceEx(path,&fa,&folderTotal,&ft);
+ if(folderTotal.QuadPart > rootTotal.QuadPart) {
+ rootTotal = folderTotal;
+ wcsncpy(storageCard,path,MAX_PATH);
+ }
+ }
+ } while(pISession->CeFindNextFile(h,&f));
+ pISession->CeFindClose(h);
+}
+
+ASDevice::ASDevice(IRAPIDevice *pIDevice,IRAPISession *pISession) : pIDevice(pIDevice), pISession(pISession), transferQueueSize(0) {
+ pIDevice->AddRef();
+ pIDevice->GetDeviceInfo(&devInfo);
+
+ pmpDeviceLoading load={this,0};
+ SendMessage(plugin.hwndPortablesParent,WM_PMP_IPC,(intptr_t)&load,PMP_IPC_DEVICELOADING);
+ if(load.UpdateCaption) {
+ wchar_t buf[200]=L"";
+ wsprintf(buf,WASABI_API_LNGSTRINGW(IDS_LOADING),devInfo.bstrName);
+ load.UpdateCaption(buf,load.context);
+ }
+
+ //find where playlists and music are stored...
+ wchar_t storageCard[MAX_PATH]=L"";
+ findStorageCard(pISession,storageCard);
+ wsprintf(musicFolder,L"%s\\Music",storageCard);
+ wsprintf(videoFolder,L"%s\\My Documents\\My Videos",storageCard);
+ wsprintf(playlistFolder,L"%s\\Playlists",storageCard);
+ wcsncpy(playlistFormat,L".asx",16);
+ // default values found. Fill in real values
+ {
+ wchar_t inifile[MAX_PATH] = {0};
+ const char * iniDirectory = (const char*)SendMessage(plugin.hwndWinampParent, WM_WA_IPC, 0, IPC_GETINIDIRECTORY);
+ wchar_t name[256] = {0};
+ lstrcpyn(name,devInfo.bstrName,256);
+ removebadchars(name);
+ wsprintf(inifile,L"%s\\Plugins\\ml\\ml_pmp_device_%s.ini",(wchar_t*)AutoWide(iniDirectory),name);
+ wchar_t * def = _wcsdup(musicFolder);
+ GetPrivateProfileString(L"pmp_activesync",L"musicfolder",def,musicFolder,MAX_PATH,inifile);
+ free(def); def = _wcsdup(videoFolder);
+ GetPrivateProfileString(L"pmp_activesync",L"videofolder",def,videoFolder,MAX_PATH,inifile);
+ free(def); def = _wcsdup(playlistFolder);
+ GetPrivateProfileString(L"pmp_activesync",L"playlistfolder",def,playlistFolder,MAX_PATH,inifile);
+ free(def);
+ }
+
+ playlists.push_back(new Playlist(devInfo.bstrName));
+
+ Find(musicFolder);
+ Find(videoFolder);
+ Find(playlistFolder);
+
+ std::sort(playlists[0]->songs.begin(),playlists[0]->songs.end(),mplSearch());
+ parserFactory = plugin.service->service_getServiceByGuid(obj_xmlGUID);
+
+ for(unsigned int i=1; i<playlists.size(); i++)
+ ReadPlaylist(playlists[i]);
+
+ SendMessage(plugin.hwndPortablesParent,WM_PMP_IPC,(intptr_t)this,PMP_IPC_DEVICECONNECTED);
+ transcoder = (Transcoder*)SendMessage(plugin.hwndPortablesParent,WM_PMP_IPC,(intptr_t)this,PMP_IPC_GET_TRANSCODER);
+
+ transcoder->AddAcceptableFormat(L"mp3");
+ transcoder->AddAcceptableFormat(L"wma");
+ transcoder->AddAcceptableFormat(L"wmv");
+ transcoder->AddAcceptableFormat(L"avi");
+ transcoder->AddAcceptableFormat(L"asf");
+ transcoder->AddAcceptableFormat(L"mpeg");
+ transcoder->AddAcceptableFormat(L"mpg");
+}
+
+ASDevice::~ASDevice()
+{
+ Playlist *mpl = playlists[ 0 ];
+ unsigned int l = (unsigned int)mpl->songs.size();
+ for ( unsigned int i = 0; i < l; i++ )
+ {
+ delete mpl->songs[ i ];
+ }
+ for ( unsigned int j = 0; j < playlists.size(); j++ )
+ {
+ delete playlists[ j ];
+ }
+ for ( int k = 0; k < devices.size(); k++ )
+ {
+ if ( devices[ k ] == this )
+ {
+ devices.erase( devices.begin() + k );
+ k--;
+ }
+ }
+ pIDevice->Release();
+ pISession->Release();
+ SysFreeString( devInfo.bstrName );
+ SysFreeString( devInfo.bstrPlatform );
+ SendMessage( plugin.hwndPortablesParent, WM_PMP_IPC, (WPARAM)transcoder, PMP_IPC_RELEASE_TRANSCODER );
+}
+
+__int64 ASDevice::getDeviceCapacityAvailable() {
+ if(devInfo.dwOsVersionMajor >= 5) {
+ ULARGE_INTEGER fa={0},t={0},ft={0};
+ pISession->CeGetDiskFreeSpaceEx(musicFolder,&fa,&t,&ft);
+ return fa.QuadPart;
+ } else {
+ STORE_INFORMATION s;
+ pISession->CeGetStoreInformation(&s);
+ return s.dwFreeSize;
+ }
+}
+
+__int64 ASDevice::getDeviceCapacityTotal() {
+ if(devInfo.dwOsVersionMajor >= 5) {
+ ULARGE_INTEGER fa={0},t={0},ft={0};
+ pISession->CeGetDiskFreeSpaceEx(musicFolder,&fa,&t,&ft);
+ return t.QuadPart;
+ } else {
+ STORE_INFORMATION s;
+ pISession->CeGetStoreInformation(&s);
+ return s.dwStoreSize;
+ }
+}
+
+void ASDevice::Eject() {
+ ejectedDevice *e = (ejectedDevice *)calloc(1, sizeof(ejectedDevice));
+ e->id = devInfo.DeviceId;
+ e->marked = true;
+ ejected.push_back(e);
+ Close();
+}
+
+void ASDevice::Close() {
+ SendMessage(plugin.hwndPortablesParent,WM_PMP_IPC,(intptr_t)this,PMP_IPC_DEVICEDISCONNECTED);
+ delete this;
+}
+
+int ASDevice::transferTrackToDevice(const itemRecordW * track,void * callbackContext,void (*callback)(void * callbackContext, wchar_t * status),songid_t * songid,int * killswitch) {
+ wchar_t ext[10]={0};
+ wchar_t file[2048]={0};
+ wcsncpy(file,track->filename,2048);
+ {wchar_t * e = wcsrchr(file,L'.'); if(e) wcsncpy(ext,e+1,10);}
+
+ bool deletefile = false;
+ if(transcoder->ShouldTranscode(file)) {
+ wchar_t newfile[MAX_PATH] = {0};
+ transcoder->CanTranscode(file,ext);
+ transcoder->GetTempFilePath(ext,newfile);
+ if(transcoder->TranscodeFile(file,newfile,killswitch,callback,callbackContext)) return -1;
+ wcsncpy(file,newfile,2048);
+ deletefile=true;
+ }
+
+ callback(callbackContext,WASABI_API_LNGSTRINGW(IDS_TRANSFERRING));
+
+ bool video = !_wcsicmp(ext,L"wmv") || !_wcsicmp(ext,L"avi");
+
+ int len = (int)(wcslen(musicFolder)+wcslen(track->artist)+wcslen(track->album)+wcslen(track->title)+100);
+ wchar_t *path = (wchar_t*)calloc(len, sizeof(wchar_t));
+ wchar_t *artist = _wcsdup(track->artist);
+ wchar_t *album = _wcsdup(track->album);
+ wchar_t *title = _wcsdup(track->title);
+ removebadchars(artist);
+ removebadchars(album);
+ removebadchars(title);
+ if(video) {
+ wcsncpy(path,videoFolder,len);
+ pISession->CeCreateDirectory(path,NULL);
+ wsprintf(path+wcslen(path),L"\\%s - %s.%s",artist,title,ext);
+ } else {
+ wcsncpy(path,musicFolder,len);
+ pISession->CeCreateDirectory(path,NULL);
+ wcscat(path,L"\\");
+ wcscat(path,artist);
+ pISession->CeCreateDirectory(path,NULL);
+ wcscat(path,L"\\");
+ wcscat(path,album);
+ pISession->CeCreateDirectory(path,NULL);
+ wsprintf(path+wcslen(path),L"\\%02d - %s.%s",track->track,title,ext);
+ }
+ free(artist); free(album); free(title);
+
+ FILE *f = _wfopen(file,L"rb");
+ if(!f) { callback(callbackContext,WASABI_API_LNGSTRINGW(IDS_CANNOT_OPEN_LOCAL_FILE)); return -1; }
+ HANDLE h = pISession->CeCreateFile(path,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
+ if(h == INVALID_HANDLE_VALUE) {
+ callback(callbackContext,WASABI_API_LNGSTRINGW(IDS_CANNOT_OPEN_FILE_ON_DEVICE));
+ fclose(f);
+ return -1;
+ }
+
+ fseek(f,0,2);
+ int error=0;
+ int size = ftell(f);
+ int pc = size/100;
+ fseek(f,0,0);
+ int written=0,lastupdate=0;
+ for(;;) {
+ char buf[32768] = {0};
+ int l = (int)fread(buf,1,sizeof(buf),f);
+ if(!l) break;
+ DWORD wl=0;
+ pISession->CeWriteFile(h,buf,l,&wl,NULL);
+ if(wl != l) {
+ callback(callbackContext,WASABI_API_LNGSTRINGW(IDS_ERROR_WRITING_FILE));
+ error=1;
+ break;
+ }
+ written += l;
+ if(written - lastupdate > pc) {
+ lastupdate = written;
+ wchar_t buf[100] = {0};
+ wsprintf(buf,WASABI_API_LNGSTRINGW(IDS_TRANSFERRING_PERCENT),written/(size/100));
+ callback(callbackContext,buf);
+ }
+ }
+
+ fclose(f);
+ pISession->CeCloseHandle(h);
+ if(deletefile) _wunlink(file);
+ if(!error) {
+ callback(callbackContext,WASABI_API_LNGSTRINGW(IDS_DONE));
+ Song * s = new Song;
+ lstrcpyn(s->fn,path,MAX_PATH);
+ lstrcpyn(s->album,track->album,fieldlen);
+ lstrcpyn(s->artist,track->artist,fieldlen);
+ lstrcpyn(s->title,track->title,fieldlen);
+ s->track = track->track;
+ s->size = size;
+ s->video = video;
+ *songid = (songid_t)s;
+ }
+ free(path);
+ return error?-1:0;
+}
+
+static __int64 fileSize(wchar_t * filename)
+{
+ WIN32_FIND_DATA f={0};
+ HANDLE h = FindFirstFileW(filename,&f);
+ if(h == INVALID_HANDLE_VALUE) return -1;
+ FindClose(h);
+ ULARGE_INTEGER i;
+ i.HighPart = f.nFileSizeHigh;
+ i.LowPart = f.nFileSizeLow;
+ return i.QuadPart;
+}
+
+static bool extentionSupported(wchar_t * ext) {
+ if(!ext) return false;
+ bool supported=false;
+ if(!_wcsicmp(ext,L".mp3") || !_wcsicmp(ext,L".wma")) supported=true;
+ if(!_wcsicmp(ext,L".avi") || !_wcsicmp(ext,L".wmv")) supported=true;
+ return supported;
+}
+
+int ASDevice::trackAddedToTransferQueue(const itemRecordW * track) {
+ __int64 s = getTrackSizeOnDevice(track);
+ if(!s) return -2;
+ __int64 avail = getDeviceCapacityAvailable();
+ __int64 cmp = transferQueueSize;
+ cmp += s;
+ if(cmp > avail) return -1;
+ else {
+ transferQueueSize += s;
+ return 0;
+ }
+}
+
+void ASDevice::trackRemovedFromTransferQueue(const itemRecordW * track) {
+ transferQueueSize -= getTrackSizeOnDevice(track);
+}
+
+__int64 ASDevice::getTrackSizeOnDevice(const itemRecordW * track) {
+ if(transcoder->ShouldTranscode(track->filename)) {
+ int k = transcoder->CanTranscode(track->filename);
+ if(k != -1 && k != 0) return k;
+ }
+ wchar_t * ext = wcsrchr(track->filename,L'.');
+ if(!extentionSupported(ext)) return 0;
+ return fileSize(track->filename);
+}
+
+void ASDevice::deleteTrack(songid_t songid) {
+ Song * song = (Song*)songid;
+ if(!pISession->CeDeleteFile(song->fn)) return;
+ for(unsigned int i=0; i<playlists.size(); i++)
+ {
+ unsigned int l = (unsigned int)playlists[i]->songs.size();
+ for(int j=0; j<l; j++)
+ {
+ if(playlists[i]->songs[j] == song)
+ {
+ playlists[i]->songs.erase(playlists[i]->songs.begin() + j);
+ j--;
+ l--;
+ playlists[i]->dirty=true;
+ }
+ }
+ }
+ delete song;
+}
+
+void ASDevice::commitChanges() {
+ for(unsigned int i=1; i<playlists.size(); i++) if(playlists[i]->dirty) { WritePlaylist(playlists[i]); playlists[i]->dirty=false; }
+}
+
+int ASDevice::getPlaylistCount() { return (int)playlists.size(); }
+void ASDevice::getPlaylistName(int playlistnumber, wchar_t * buf, int len) { lstrcpyn(buf,playlists[playlistnumber]->name,len); }
+int ASDevice::getPlaylistLength(int playlistnumber) { return (int)playlists[playlistnumber]->songs.size(); }
+songid_t ASDevice::getPlaylistTrack(int playlistnumber,int songnum) { return (songid_t)playlists[playlistnumber]->songs[songnum]; }
+
+void ASDevice::setPlaylistName(int playlistnumber, const wchar_t * buf) {
+ Playlist * pl = playlists[playlistnumber];
+ lstrcpyn(pl->name,buf,fieldlen);
+ wchar_t * oldname = _wcsdup(pl->fn);
+ wchar_t * name = _wcsdup(buf);
+ removebadchars(name);
+ wsprintf(pl->fn,L"%s\\%s.%s",playlistFolder,name,playlistFormat);
+ free(name);
+ pISession->CeMoveFile(oldname,pl->fn);
+ free(oldname);
+}
+
+void ASDevice::playlistSwapItems(int playlistnumber, int posA, int posB) {
+ std::vector<Song*> &songs = playlists[playlistnumber]->songs;
+ Song * a = songs[posA];
+ Song * b = songs[posB];
+ songs[posA] = b;
+ songs[posB] = a;
+ playlists[playlistnumber]->dirty=true;
+}
+
+#define CMPFIELDS(x) { int v = lstrcmpi(a->x,b->x); if(v) return v<0; }
+#define CMPINTFIELDS(x) { int v = a->x-b->x; if(v) return v<0; }
+
+typedef struct PlaylistItemSort {
+ int use_by;
+ bool operator()(Song*& a,Song*& b) {
+ int x;
+ for (x = 0; x < 4; x ++)
+ {
+ if (use_by == SORTBY_TITLE) // title -> artist -> album -> disc -> track
+ {
+ CMPFIELDS(title);
+ use_by=SORTBY_ARTIST;
+ }
+ else if (use_by == SORTBY_ARTIST) // artist -> album -> disc -> track -> title
+ {
+ CMPFIELDS(artist);
+ use_by=SORTBY_ALBUM;
+ }
+ else if (use_by == SORTBY_ALBUM) // album -> disc -> track -> title -> artist
+ {
+ CMPFIELDS(album);
+ use_by=SORTBY_TRACKNUM;
+ }
+ else if (use_by == SORTBY_TRACKNUM) // track -> title -> artist -> album -> disc
+ {
+ CMPINTFIELDS(track);
+ use_by=SORTBY_TITLE;
+ }
+ else break; // no sort order?
+ }
+ return false;
+ }
+} PlaylistItemSort;
+#undef CMPFIELDS
+#undef CMPINTFIELDS
+
+void ASDevice::sortPlaylist(int playlistnumber, int sortBy) {
+ PlaylistItemSort sort;
+ sort.use_by = sortBy;
+ std::sort(playlists[playlistnumber]->songs.begin(),playlists[playlistnumber]->songs.end(),sort);
+ playlists[playlistnumber]->dirty=true;
+}
+
+void ASDevice::addTrackToPlaylist(int playlistnumber, songid_t songid){
+ playlists[playlistnumber]->songs.push_back((Song*)songid);
+ playlists[playlistnumber]->dirty=true;
+}
+
+void ASDevice::removeTrackFromPlaylist(int playlistnumber, int songnum) {
+ playlists[playlistnumber]->songs.erase(playlists[playlistnumber]->songs.begin() + songnum);
+ playlists[playlistnumber]->dirty=true;
+}
+
+void ASDevice::deletePlaylist(int playlistnumber) {
+ pISession->CeDeleteFile(playlists[playlistnumber]->fn);
+ delete playlists[playlistnumber];
+ playlists.erase(playlists.begin() + playlistnumber);
+}
+
+int ASDevice::newPlaylist(const wchar_t * name0) {
+ pISession->CeCreateDirectory(playlistFolder,NULL);
+ Playlist* pl = new Playlist(name0);
+ wchar_t * name = _wcsdup(name0);
+ removebadchars(name);
+ wsprintf(pl->fn,L"%s\\%s.%s",playlistFolder,name,playlistFormat);
+ free(name);
+ pl->dirty=true;
+ playlists.push_back(pl);
+ return (int)playlists.size()-1;
+}
+
+void ASDevice::getTrackArtist(songid_t songid, wchar_t * buf, int len) { lstrcpyn(buf,((Song*)songid)->artist,len); }
+void ASDevice::getTrackAlbum(songid_t songid, wchar_t * buf, int len) { lstrcpyn(buf,((Song*)songid)->album,len); }
+void ASDevice::getTrackTitle(songid_t songid, wchar_t * buf, int len) { lstrcpyn(buf,((Song*)songid)->title,len); }
+int ASDevice::getTrackTrackNum(songid_t songid) { return ((Song*)songid)->track; }
+__int64 ASDevice::getTrackSize(songid_t songid) { return ((Song*)songid)->size; }
+void ASDevice::getTrackExtraInfo(songid_t songid, const wchar_t * field, wchar_t * buf, int len) {
+ if(!wcscmp(field,FIELD_EXTENSION)) {
+ Song * s = (Song *)songid;
+ wchar_t * ext = wcsrchr(s->fn,L'.');
+ if(ext) { ext++; lstrcpyn(buf,ext,len); }
+ }
+}
+
+int ASDevice::copyToHardDrive(songid_t song,wchar_t * path,void * callbackContext,void (*callback)(void * callbackContext, wchar_t * status),int * killswitch) {
+ Song * s = (Song*)song;
+ wchar_t * ext = wcsrchr(s->fn,L'.');
+ if(ext && wcslen(ext)<10) wcscat(path,ext);
+ callback(callbackContext,WASABI_API_LNGSTRINGW(IDS_TRANSFERRING));
+ FILE * f = _wfopen(path,L"wb");
+ if(!f) {
+ callback(callbackContext,WASABI_API_LNGSTRINGW(IDS_CANNOT_OPEN_DESTINATION));
+ return -1;
+ }
+
+ HANDLE h = pISession->CeCreateFile(s->fn,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,NULL);
+ if(h == INVALID_HANDLE_VALUE) {
+ callback(callbackContext,WASABI_API_LNGSTRINGW(IDS_CANNOT_OPEN_FILE_ON_DEVICE));
+ fclose(f);
+ return -1;
+ }
+
+ int error=0;
+ int pc = (int)(s->size/100);
+ int written=0,lastupdate=0;
+ for(;;) {
+ char buf[32768] = {0};
+ DWORD read=0;
+ pISession->CeReadFile(h,buf,sizeof(buf),&read,NULL);
+ if(!read) break;
+ int wr = (int)fwrite(buf,1,read,f);
+ if(wr != read) {
+ callback(callbackContext,WASABI_API_LNGSTRINGW(IDS_ERROR_WRITING_FILE));
+ error=1;
+ break;
+ }
+ written += read;
+ if(written - lastupdate > pc) {
+ lastupdate = written;
+ wchar_t buf[100] = {0};
+ wsprintf(buf,WASABI_API_LNGSTRINGW(IDS_TRANSFERRING),written/(s->size/100));
+ callback(callbackContext,buf);
+ }
+ }
+
+ pISession->CeCloseHandle(h);
+ fclose(f);
+ if(!error) {
+ callback(callbackContext,WASABI_API_LNGSTRINGW(IDS_DONE));
+ return 0;
+ } else return -1;
+}
+
+static BOOL CALLBACK config_dialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam);
+
+intptr_t ASDevice::extraActions(intptr_t param1, intptr_t param2, intptr_t param3,intptr_t param4) {
+ switch(param1) {
+ case DEVICE_SET_ICON:
+ {
+ MLTREEIMAGE * i = (MLTREEIMAGE*)param2;
+ i->hinst = plugin.hDllInstance;
+ i->resourceId = IDR_ACTIVESYNC_ICON;
+ }
+ break;
+ case DEVICE_SUPPORTED_METADATA: return 0x8f;
+ case DEVICE_DOES_NOT_SUPPORT_EDITING_METADATA: return 1;
+ case DEVICE_GET_PREFS_DIALOG:
+ if(param3 == 0) {
+ pref_tab * p = (pref_tab *)param2;
+ p->hinst = WASABI_API_LNG_HINST;
+ p->dlg_proc = (DLGPROC)config_dialogProc;
+ p->res_id = IDD_CONFIG;
+ lstrcpyn(p->title,WASABI_API_LNGSTRINGW(IDS_ADVANCED),100);
+ }
+ break;
+ case DEVICE_SUPPORTS_VIDEO:
+ return 1;
+ }
+ return 0;
+}
+
+static BOOL CALLBACK config_dialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam) {
+ static ASDevice * dev;
+ switch(uMsg) {
+ case WM_INITDIALOG:
+ {
+ prefsParam* p = (prefsParam*)lParam;
+ dev = (ASDevice*)p->dev;
+ p->config_tab_init(hwndDlg,p->parent);
+ SetDlgItemText(hwndDlg,IDC_FOLDER_MUSIC,dev->musicFolder);
+ SetDlgItemText(hwndDlg,IDC_FOLDER_VIDEO,dev->videoFolder);
+ SetDlgItemText(hwndDlg,IDC_FOLDER_PLAYLIST,dev->playlistFolder);
+ }
+ break;
+ case WM_DESTROY:
+ {
+ GetDlgItemText(hwndDlg,IDC_FOLDER_MUSIC,dev->musicFolder,MAX_PATH);
+ GetDlgItemText(hwndDlg,IDC_FOLDER_VIDEO,dev->videoFolder,MAX_PATH);
+ GetDlgItemText(hwndDlg,IDC_FOLDER_PLAYLIST,dev->playlistFolder,MAX_PATH);
+ wchar_t *inifile = (wchar_t*)SendMessage(plugin.hwndPortablesParent,WM_PMP_IPC,(intptr_t)dev,PMP_IPC_GET_INI_FILE);
+#if 1
+ wchar_t inifil[MAX_PATH] = {0};
+ if(!inifile) {
+ inifile=inifil;
+ const char * iniDirectory = (const char*)SendMessage(plugin.hwndWinampParent, WM_WA_IPC, 0, IPC_GETINIDIRECTORY);
+ wchar_t name[256] = {0};
+ lstrcpyn(name,dev->devInfo.bstrName,256);
+ removebadchars(name);
+ wsprintf(inifile,L"%s\\Plugins\\ml\\ml_pmp_device_%s.ini",(wchar_t*)AutoWide(iniDirectory),name);
+ }
+#endif
+ if(inifile) {
+ WritePrivateProfileString(L"pmp_activesync",L"musicfolder",dev->musicFolder,inifile);
+ WritePrivateProfileString(L"pmp_activesync",L"videofolder",dev->videoFolder,inifile);
+ WritePrivateProfileString(L"pmp_activesync",L"playlistfolder",dev->playlistFolder,inifile);
+ }
+ }
+ break;
+ case WM_COMMAND:
+ switch(LOWORD(wParam)) {
+ case IDC_RESCAN:
+ config_dialogProc(hwndDlg,WM_DESTROY,0,0);
+ dev->Close();
+ break;
+ }
+ break;
+ }
+ return 0;
+} \ No newline at end of file
diff --git a/Src/Plugins/Portable/pmp_activesync/ASDevice.h b/Src/Plugins/Portable/pmp_activesync/ASDevice.h
new file mode 100644
index 00000000..c1fa7584
--- /dev/null
+++ b/Src/Plugins/Portable/pmp_activesync/ASDevice.h
@@ -0,0 +1,172 @@
+#define _WIN32_DCOM
+
+#include <winsock2.h>
+#include <windows.h>
+#include <windowsx.h>
+#include <rapi2.h>
+#include <shlobj.h>
+//#include <vector>
+#include <algorithm>
+
+#include <vector>
+
+#include "../Winamp/wa_ipc.h"
+#include "../Plugins/General/gen_ml/ml.h"
+#include "../Plugins/Library/ml_pmp/pmp.h"
+#include "../Plugins/Library/ml_pmp/transcoder.h"
+#include "../nu/AutoWide.h"
+#include "../nu/AutoChar.h"
+
+#include <api/service/waservicefactory.h>
+#include "../playlist/ifc_playlistloader.h"
+#include "../xml/ifc_xmlreadercallback.h"
+#include "../xml/obj_xml.h"
+#include "../xml/api__xml.h"
+#include "../Agave/Language/api_language.h"
+
+#include "resource.h"
+
+typedef struct {
+ RAPIDEVICEID id;
+ bool marked;
+} ejectedDevice;
+
+extern PMPDevicePlugin plugin;
+extern std::vector<ejectedDevice*> ejected;
+
+#define fieldlen 128
+
+class Song {
+public:
+ wchar_t artist[fieldlen],album[fieldlen],title[fieldlen];
+ wchar_t fn[MAX_PATH];
+ int track;
+ __int64 size;
+ bool video;
+ Song(const wchar_t * path, LPCE_FIND_DATA f, bool video);
+ Song();
+};
+
+class Playlist {
+public:
+ std::vector<Song*> songs;
+ wchar_t name[fieldlen];
+ wchar_t fn[MAX_PATH];
+ bool dirty;
+ Playlist(const wchar_t * path, LPCE_FIND_DATA f);
+ Playlist(const wchar_t * name);
+};
+
+class ASDevice : public Device {
+public:
+
+ wchar_t musicFolder[MAX_PATH];
+ wchar_t videoFolder[MAX_PATH];
+ wchar_t playlistFolder[MAX_PATH];
+ wchar_t playlistFormat[16];
+
+ IRAPIDevice *pIDevice;
+ IRAPISession *pISession;
+
+ Transcoder * transcoder;
+ RAPI_DEVICEINFO devInfo;
+ __int64 transferQueueSize;
+ std::vector<Playlist*> playlists;
+ void Find(const wchar_t * dir);
+ void FoundFile(const wchar_t * path, LPCE_FIND_DATA f);
+
+ void WritePlaylist(Playlist * pl);
+ void ReadPlaylist(Playlist * pl);
+
+ ASDevice(IRAPIDevice *pIDevice,IRAPISession *pISession);
+ ~ASDevice();
+
+ virtual __int64 getDeviceCapacityAvailable(); // in bytes
+ virtual __int64 getDeviceCapacityTotal(); // in bytes
+
+ virtual void Eject();
+ virtual void Close(); // save any changes, and call PMP_IPC_DEVICEDISCONNECTED AND delete this;
+
+
+ // return 0 for success, -1 for failed or cancelled
+ virtual int transferTrackToDevice(const itemRecordW * track, // the track to transfer
+ void * callbackContext, //pass this to the callback
+ void (*callback)(void * callbackContext, wchar_t * status), // call this every so often so the GUI can be updated. Including when finished!
+ songid_t * songid, // fill in the songid when you are finished
+ int * killswitch // if this gets set to anything other than zero, the transfer has been cancelled by the user
+ );
+ virtual int trackAddedToTransferQueue(const itemRecordW * track); // return 0 to accept, -1 for "not enough space", -2 for "incorrect format"
+ virtual void trackRemovedFromTransferQueue(const itemRecordW * track);
+
+ // return the amount of space that will be taken up on the device by the track (once it has been tranferred)
+ // or 0 for incompatable. This is usually the filesize, unless you are transcoding. An estimate is acceptable.
+ virtual __int64 getTrackSizeOnDevice(const itemRecordW * track);
+
+ virtual void deleteTrack(songid_t songid); // physically remove from device. Be sure to remove it from all the playlists!
+
+ virtual void commitChanges(); // optional. Will be called at a good time to save changes
+
+ virtual int getPlaylistCount(); // always at least 1. playlistnumber 0 is the Master Playlist containing all tracks.
+ // PlaylistName(0) should return the name of the device.
+ virtual void getPlaylistName(int playlistnumber, wchar_t * buf, int len);
+ virtual int getPlaylistLength(int playlistnumber);
+ virtual songid_t getPlaylistTrack(int playlistnumber,int songnum); // returns a songid
+
+ virtual void setPlaylistName(int playlistnumber, const wchar_t * buf); // with playlistnumber==0, set the name of the device.
+ virtual void playlistSwapItems(int playlistnumber, int posA, int posB); // swap the songs at position posA and posB
+ virtual void sortPlaylist(int playlistnumber, int sortBy);
+ virtual void addTrackToPlaylist(int playlistnumber, songid_t songid); // adds songid to the end of the playlist
+ virtual void removeTrackFromPlaylist(int playlistnumber, int songnum); //where songnum is the position of the track in the playlist
+
+ virtual void deletePlaylist(int playlistnumber);
+ virtual int newPlaylist(const wchar_t * name); // create empty playlist, returns playlistnumber. -1 for failed.
+
+ virtual void getTrackArtist(songid_t songid, wchar_t * buf, int len);
+ virtual void getTrackAlbum(songid_t songid, wchar_t * buf, int len);
+ virtual void getTrackTitle(songid_t songid, wchar_t * buf, int len);
+ virtual int getTrackTrackNum(songid_t songid);
+ virtual int getTrackDiscNum(songid_t songid){return -1;}
+ virtual void getTrackGenre(songid_t songid, wchar_t * buf, int len){buf[0]=0;}
+ virtual int getTrackYear(songid_t songid){return -1;}
+ virtual __int64 getTrackSize(songid_t songid); // in bytes
+ virtual int getTrackLength(songid_t songid){return -1;} // in millisecs
+ virtual int getTrackBitrate(songid_t songid){return -1;} // in kbps
+ virtual int getTrackPlayCount(songid_t songid){return 0;}
+ virtual int getTrackRating(songid_t songid){return 0;} //0-5
+ virtual __time64_t getTrackLastPlayed(songid_t songid){return 0;} // in unix time format
+ virtual __time64_t getTrackLastUpdated(songid_t songid){return 0;} // in unix time format
+ virtual int getTrackType(songid_t songid) { return ((Song *)songid)->video?1:0; }
+ virtual void getTrackExtraInfo(songid_t songid, const wchar_t * field, wchar_t * buf, int len); //optional
+
+ // feel free to ignore any you don't support
+ virtual void setTrackArtist(songid_t songid, const wchar_t * value){}
+ virtual void setTrackAlbum(songid_t songid, const wchar_t * value){}
+ virtual void setTrackTitle(songid_t songid, const wchar_t * value){}
+ virtual void setTrackTrackNum(songid_t songid, int value){}
+ virtual void setTrackDiscNum(songid_t songid, int value){}
+ virtual void setTrackGenre(songid_t songid, const wchar_t * value){}
+ virtual void setTrackYear(songid_t songid, int year){}
+ virtual void setTrackPlayCount(songid_t songid, int value){}
+ virtual void setTrackRating(songid_t songid, int value){}
+ virtual void setTrackLastPlayed(songid_t songid, __time64_t value){} // in unix time format
+ virtual void setTrackLastUpdated(songid_t songid, __time64_t value){} // in unix time format
+ virtual void setTrackExtraInfo(songid_t songid, const wchar_t * field, const wchar_t * value) {}; //optional
+
+ virtual bool playTracks(songid_t * songidList, int listLength, int startPlaybackAt, bool enqueue){return false;} // return false if unsupported
+
+ virtual intptr_t extraActions(intptr_t param1, intptr_t param2, intptr_t param3,intptr_t param4);
+
+ // new methods as of PMPHDR_VER 0x002
+ virtual bool copyToHardDriveSupported() {return true;}
+
+ virtual __int64 songSizeOnHardDrive(songid_t song) {return getTrackSize(song);} // how big a song will be when copied back. Return -1 for not supported.
+
+ virtual int copyToHardDrive(songid_t song, // the song to copy
+ wchar_t * path, // path to copy to, in the form "c:\directory\song". The directory will already be created, you must append ".mp3" or whatever to this string! (there is space for at least 10 new characters).
+ void * callbackContext, //pass this to the callback
+ void (*callback)(void * callbackContext, wchar_t * status), // call this every so often so the GUI can be updated. Including when finished!
+ int * killswitch // if this gets set to anything other than zero, the transfer has been cancelled by the user
+ ); // -1 for failed/not supported. 0 for success.
+};
+
+extern std::vector<ASDevice*> devices;
diff --git a/Src/Plugins/Portable/pmp_activesync/activesync/Inc/IRAPIStream.h b/Src/Plugins/Portable/pmp_activesync/activesync/Inc/IRAPIStream.h
new file mode 100644
index 00000000..c1004fa1
--- /dev/null
+++ b/Src/Plugins/Portable/pmp_activesync/activesync/Inc/IRAPIStream.h
@@ -0,0 +1,286 @@
+
+
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+ /* File created by MIDL compiler version 6.00.0361 */
+/* at Fri Sep 17 22:09:50 2004
+ */
+/* Compiler settings for ..\IRAPIStream.idl:
+ Oicf, W1, Zp8, env=Win32 (32b run)
+ protocol : dce , ms_ext, c_ext, robust
+ error checks: allocation ref bounds_check enum stub_data
+ VC __declspec() decoration level:
+ __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+ DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING( )
+
+#pragma warning( disable: 4049 ) /* more than 64k source lines */
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+#ifndef COM_NO_WINDOWS_H
+#include "windows.h"
+#include "ole2.h"
+#endif /*COM_NO_WINDOWS_H*/
+
+#ifndef __IRAPIStream_h__
+#define __IRAPIStream_h__
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+/* Forward Declarations */
+
+#ifndef __IRAPIStream_FWD_DEFINED__
+#define __IRAPIStream_FWD_DEFINED__
+typedef interface IRAPIStream IRAPIStream;
+#endif /* __IRAPIStream_FWD_DEFINED__ */
+
+
+/* header files for imported files */
+#include "oaidl.h"
+#include "ocidl.h"
+#include "rapitypes.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+void * __RPC_USER MIDL_user_allocate(size_t);
+void __RPC_USER MIDL_user_free( void * );
+
+#ifndef __IRAPIStream_INTERFACE_DEFINED__
+#define __IRAPIStream_INTERFACE_DEFINED__
+
+/* interface IRAPIStream */
+/* [object][uuid] */
+
+
+EXTERN_C const IID IID_IRAPIStream;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("449FE623-24B0-454b-A889-129BB05DDBED")
+ IRAPIStream : public IStream
+ {
+ public:
+ virtual HRESULT STDMETHODCALLTYPE SetRapiStat(
+ /* [in] */ RAPISTREAMFLAG Flag,
+ /* [in] */ DWORD dwValue) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetRapiStat(
+ /* [in] */ RAPISTREAMFLAG Flag,
+ /* [out] */ DWORD *pdwValue) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IRAPIStreamVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IRAPIStream * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IRAPIStream * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IRAPIStream * This);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Read )(
+ IRAPIStream * This,
+ /* [length_is][size_is][out] */ void *pv,
+ /* [in] */ ULONG cb,
+ /* [out] */ ULONG *pcbRead);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Write )(
+ IRAPIStream * This,
+ /* [size_is][in] */ const void *pv,
+ /* [in] */ ULONG cb,
+ /* [out] */ ULONG *pcbWritten);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Seek )(
+ IRAPIStream * This,
+ /* [in] */ LARGE_INTEGER dlibMove,
+ /* [in] */ DWORD dwOrigin,
+ /* [out] */ ULARGE_INTEGER *plibNewPosition);
+
+ HRESULT ( STDMETHODCALLTYPE *SetSize )(
+ IRAPIStream * This,
+ /* [in] */ ULARGE_INTEGER libNewSize);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *CopyTo )(
+ IRAPIStream * This,
+ /* [unique][in] */ IStream *pstm,
+ /* [in] */ ULARGE_INTEGER cb,
+ /* [out] */ ULARGE_INTEGER *pcbRead,
+ /* [out] */ ULARGE_INTEGER *pcbWritten);
+
+ HRESULT ( STDMETHODCALLTYPE *Commit )(
+ IRAPIStream * This,
+ /* [in] */ DWORD grfCommitFlags);
+
+ HRESULT ( STDMETHODCALLTYPE *Revert )(
+ IRAPIStream * This);
+
+ HRESULT ( STDMETHODCALLTYPE *LockRegion )(
+ IRAPIStream * This,
+ /* [in] */ ULARGE_INTEGER libOffset,
+ /* [in] */ ULARGE_INTEGER cb,
+ /* [in] */ DWORD dwLockType);
+
+ HRESULT ( STDMETHODCALLTYPE *UnlockRegion )(
+ IRAPIStream * This,
+ /* [in] */ ULARGE_INTEGER libOffset,
+ /* [in] */ ULARGE_INTEGER cb,
+ /* [in] */ DWORD dwLockType);
+
+ HRESULT ( STDMETHODCALLTYPE *Stat )(
+ IRAPIStream * This,
+ /* [out] */ STATSTG *pstatstg,
+ /* [in] */ DWORD grfStatFlag);
+
+ HRESULT ( STDMETHODCALLTYPE *Clone )(
+ IRAPIStream * This,
+ /* [out] */ IStream **ppstm);
+
+ HRESULT ( STDMETHODCALLTYPE *SetRapiStat )(
+ IRAPIStream * This,
+ /* [in] */ RAPISTREAMFLAG Flag,
+ /* [in] */ DWORD dwValue);
+
+ HRESULT ( STDMETHODCALLTYPE *GetRapiStat )(
+ IRAPIStream * This,
+ /* [in] */ RAPISTREAMFLAG Flag,
+ /* [out] */ DWORD *pdwValue);
+
+ END_INTERFACE
+ } IRAPIStreamVtbl;
+
+ interface IRAPIStream
+ {
+ CONST_VTBL struct IRAPIStreamVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IRAPIStream_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IRAPIStream_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IRAPIStream_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IRAPIStream_Read(This,pv,cb,pcbRead) \
+ (This)->lpVtbl -> Read(This,pv,cb,pcbRead)
+
+#define IRAPIStream_Write(This,pv,cb,pcbWritten) \
+ (This)->lpVtbl -> Write(This,pv,cb,pcbWritten)
+
+
+#define IRAPIStream_Seek(This,dlibMove,dwOrigin,plibNewPosition) \
+ (This)->lpVtbl -> Seek(This,dlibMove,dwOrigin,plibNewPosition)
+
+#define IRAPIStream_SetSize(This,libNewSize) \
+ (This)->lpVtbl -> SetSize(This,libNewSize)
+
+#define IRAPIStream_CopyTo(This,pstm,cb,pcbRead,pcbWritten) \
+ (This)->lpVtbl -> CopyTo(This,pstm,cb,pcbRead,pcbWritten)
+
+#define IRAPIStream_Commit(This,grfCommitFlags) \
+ (This)->lpVtbl -> Commit(This,grfCommitFlags)
+
+#define IRAPIStream_Revert(This) \
+ (This)->lpVtbl -> Revert(This)
+
+#define IRAPIStream_LockRegion(This,libOffset,cb,dwLockType) \
+ (This)->lpVtbl -> LockRegion(This,libOffset,cb,dwLockType)
+
+#define IRAPIStream_UnlockRegion(This,libOffset,cb,dwLockType) \
+ (This)->lpVtbl -> UnlockRegion(This,libOffset,cb,dwLockType)
+
+#define IRAPIStream_Stat(This,pstatstg,grfStatFlag) \
+ (This)->lpVtbl -> Stat(This,pstatstg,grfStatFlag)
+
+#define IRAPIStream_Clone(This,ppstm) \
+ (This)->lpVtbl -> Clone(This,ppstm)
+
+
+#define IRAPIStream_SetRapiStat(This,Flag,dwValue) \
+ (This)->lpVtbl -> SetRapiStat(This,Flag,dwValue)
+
+#define IRAPIStream_GetRapiStat(This,Flag,pdwValue) \
+ (This)->lpVtbl -> GetRapiStat(This,Flag,pdwValue)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+HRESULT STDMETHODCALLTYPE IRAPIStream_SetRapiStat_Proxy(
+ IRAPIStream * This,
+ /* [in] */ RAPISTREAMFLAG Flag,
+ /* [in] */ DWORD dwValue);
+
+
+void __RPC_STUB IRAPIStream_SetRapiStat_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IRAPIStream_GetRapiStat_Proxy(
+ IRAPIStream * This,
+ /* [in] */ RAPISTREAMFLAG Flag,
+ /* [out] */ DWORD *pdwValue);
+
+
+void __RPC_STUB IRAPIStream_GetRapiStat_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IRAPIStream_INTERFACE_DEFINED__ */
+
+
+/* Additional Prototypes for ALL interfaces */
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
diff --git a/Src/Plugins/Portable/pmp_activesync/activesync/Inc/rapi.h b/Src/Plugins/Portable/pmp_activesync/activesync/Inc/rapi.h
new file mode 100644
index 00000000..18e47dbd
--- /dev/null
+++ b/Src/Plugins/Portable/pmp_activesync/activesync/Inc/rapi.h
@@ -0,0 +1,118 @@
+// --------------------------------------------------------------------------
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// Module:
+//
+// rapi.h
+//
+// Purpose:
+//
+// Master include file for Windows CE Remote API
+//
+// --------------------------------------------------------------------------
+
+#ifndef RAPI_H
+#define RAPI_H
+
+#include <windows.h>
+
+#include "rapitypes.h"
+#include "irapistream.h"
+
+#ifndef UNDER_CE
+
+STDAPI CeRapiInitEx(RAPIINIT*);
+STDAPI CeRapiInit();
+STDAPI CeRapiUninit();
+STDAPI CeRapiGetError(void);
+STDAPI CeRapiFreeBuffer(LPVOID);
+STDAPI_( HRESULT ) CeRapiInvoke(LPCWSTR, LPCWSTR,DWORD,BYTE *, DWORD *,BYTE **, IRAPIStream **,DWORD);
+
+STDAPI_(CEOID) CeCreateDatabase (LPWSTR, DWORD, WORD, SORTORDERSPEC*);
+STDAPI_(BOOL ) CeDeleteDatabase (CEOID);
+STDAPI_(BOOL ) CeDeleteRecord (HANDLE, CEOID);
+STDAPI_(HANDLE) CeFindFirstDatabase (DWORD);
+STDAPI_(CEOID) CeFindNextDatabase (HANDLE);
+STDAPI_(BOOL ) CeOidGetInfo (CEOID, CEOIDINFO*);
+STDAPI_(HANDLE) CeOpenDatabase (PCEOID, LPWSTR, CEPROPID, DWORD, HWND);
+STDAPI_(CEOID) CeReadRecordProps (HANDLE, DWORD, LPWORD, CEPROPID*, LPBYTE*, LPDWORD);
+STDAPI_(CEOID) CeSeekDatabase (HANDLE, DWORD, DWORD, LPDWORD);
+STDAPI_(BOOL ) CeSetDatabaseInfo (CEOID, CEDBASEINFO*);
+STDAPI_(HANDLE) CeFindFirstFile (LPCWSTR, LPCE_FIND_DATA);
+STDAPI_(BOOL ) CeFindNextFile (HANDLE, LPCE_FIND_DATA);
+STDAPI_(BOOL ) CeFindClose (HANDLE);
+STDAPI_(DWORD ) CeGetFileAttributes (LPCWSTR);
+STDAPI_(BOOL ) CeSetFileAttributes (LPCWSTR, DWORD);
+STDAPI_(HANDLE) CeCreateFile (LPCWSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE);
+STDAPI_(BOOL ) CeReadFile (HANDLE, LPVOID, DWORD, LPDWORD, LPOVERLAPPED);
+STDAPI_(BOOL ) CeWriteFile (HANDLE, LPCVOID, DWORD, LPDWORD, LPOVERLAPPED);
+STDAPI_(BOOL ) CeCloseHandle (HANDLE);
+STDAPI_(BOOL ) CeFindAllFiles (LPCWSTR, DWORD, LPDWORD, LPLPCE_FIND_DATA);
+STDAPI_(BOOL ) CeFindAllDatabases (DWORD, WORD, LPWORD, LPLPCEDB_FIND_DATA);
+STDAPI_(DWORD ) CeGetLastError (void);
+STDAPI_(DWORD ) CeSetFilePointer (HANDLE, LONG, PLONG, DWORD);
+STDAPI_(BOOL ) CeSetEndOfFile (HANDLE);
+STDAPI_(BOOL ) CeCreateDirectory (LPCWSTR, LPSECURITY_ATTRIBUTES);
+STDAPI_(BOOL ) CeRemoveDirectory (LPCWSTR);
+STDAPI_(BOOL ) CeCreateProcess (LPCWSTR, LPCWSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, BOOL, DWORD, LPVOID, LPWSTR, LPSTARTUPINFO, LPPROCESS_INFORMATION);
+STDAPI_(BOOL ) CeMoveFile (LPCWSTR, LPCWSTR);
+STDAPI_(BOOL ) CeCopyFile (LPCWSTR, LPCWSTR, BOOL);
+STDAPI_(BOOL ) CeDeleteFile (LPCWSTR);
+STDAPI_(DWORD ) CeGetFileSize (HANDLE, LPDWORD);
+STDAPI_(LONG ) CeRegOpenKeyEx (HKEY, LPCWSTR, DWORD, REGSAM, PHKEY);
+STDAPI_(LONG ) CeRegEnumKeyEx (HKEY, DWORD, LPWSTR, LPDWORD, LPDWORD, LPWSTR, LPDWORD, PFILETIME);
+STDAPI_(LONG ) CeRegCreateKeyEx (HKEY, LPCWSTR, DWORD, LPWSTR, DWORD, REGSAM, LPSECURITY_ATTRIBUTES, PHKEY, LPDWORD);
+STDAPI_(LONG ) CeRegCloseKey (HKEY);
+STDAPI_(LONG ) CeRegDeleteKey (HKEY, LPCWSTR);
+STDAPI_(LONG ) CeRegEnumValue (HKEY, DWORD, LPWSTR, LPDWORD, LPDWORD, LPDWORD, LPBYTE, LPDWORD);
+STDAPI_(LONG ) CeRegDeleteValue (HKEY, LPCWSTR);
+STDAPI_(LONG ) CeRegQueryInfoKey (HKEY, LPWSTR, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPDWORD, PFILETIME);
+STDAPI_(LONG ) CeRegQueryValueEx (HKEY, LPCWSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD);
+STDAPI_(LONG ) CeRegSetValueEx (HKEY, LPCWSTR, DWORD, DWORD, LPBYTE, DWORD);
+STDAPI_(BOOL ) CeGetStoreInformation(LPSTORE_INFORMATION);
+STDAPI_(INT ) CeGetSystemMetrics (INT);
+STDAPI_(INT ) CeGetDesktopDeviceCaps(INT);
+STDAPI_(VOID ) CeGetSystemInfo (LPSYSTEM_INFO);
+STDAPI_(DWORD ) CeSHCreateShortcut (LPWSTR, LPWSTR);
+STDAPI_(BOOL ) CeSHGetShortcutTarget(LPWSTR, LPWSTR, INT);
+STDAPI_(BOOL ) CeCheckPassword (LPWSTR);
+STDAPI_(BOOL ) CeGetFileTime (HANDLE, LPFILETIME, LPFILETIME, LPFILETIME);
+STDAPI_(BOOL ) CeSetFileTime (HANDLE, LPFILETIME, LPFILETIME, LPFILETIME);
+STDAPI_(BOOL ) CeGetVersionEx (LPCEOSVERSIONINFO);
+STDAPI_(HWND ) CeGetWindow (HWND, UINT);
+STDAPI_(LONG ) CeGetWindowLong (HWND, int);
+STDAPI_(int ) CeGetWindowText (HWND, LPWSTR, int);
+STDAPI_(int ) CeGetClassName (HWND, LPWSTR, int);
+STDAPI_(VOID ) CeGlobalMemoryStatus (LPMEMORYSTATUS);
+STDAPI_(BOOL ) CeGetSystemPowerStatusEx(PSYSTEM_POWER_STATUS_EX, BOOL);
+STDAPI_(DWORD ) CeGetTempPath (DWORD, LPWSTR);
+STDAPI_(DWORD ) CeGetSpecialFolderPath(int, DWORD, LPWSTR);
+STDAPI_(HANDLE) CeFindFirstDatabaseEx (PCEGUID, DWORD);
+STDAPI_(CEOID ) CeFindNextDatabaseEx (HANDLE, PCEGUID);
+STDAPI_(CEOID ) CeCreateDatabaseEx (PCEGUID, CEDBASEINFO*);
+STDAPI_(BOOL ) CeSetDatabaseInfoEx (PCEGUID, CEOID, CEDBASEINFO*);
+STDAPI_(HANDLE) CeOpenDatabaseEx (PCEGUID, PCEOID, LPWSTR, CEPROPID, DWORD, CENOTIFYREQUEST *);
+STDAPI_(BOOL ) CeDeleteDatabaseEx (PCEGUID, CEOID);
+STDAPI_(CEOID ) CeReadRecordPropsEx (HANDLE, DWORD, LPWORD, CEPROPID*, LPBYTE*, LPDWORD, HANDLE);
+STDAPI_(CEOID ) CeWriteRecordProps (HANDLE, CEOID, WORD, CEPROPVAL*);
+STDAPI_(BOOL ) CeMountDBVol (PCEGUID, LPWSTR, DWORD);
+STDAPI_(BOOL ) CeUnmountDBVol (PCEGUID);
+STDAPI_(BOOL ) CeFlushDBVol (PCEGUID);
+STDAPI_(BOOL ) CeEnumDBVolumes (PCEGUID, LPWSTR, DWORD);
+STDAPI_(BOOL ) CeOidGetInfoEx (PCEGUID, CEOID, CEOIDINFO*);
+STDAPI CeSyncStart (LPCWSTR);
+STDAPI CeSyncStop ();
+STDAPI_(BOOL ) CeQueryInstructionSet (DWORD, LPDWORD);
+STDAPI_(BOOL ) CeGetDiskFreeSpaceEx (LPCWSTR, ULARGE_INTEGER *, ULARGE_INTEGER *, ULARGE_INTEGER *);
+#endif // #ifndef UNDER_CE
+
+#ifndef NO_APIMAP
+#include <ceapimap.h>
+#endif
+
+#ifdef CONN_INTERNAL
+#include <prapi.h> // internal defines
+#endif
+
+#endif // #ifndef RAPI_H
diff --git a/Src/Plugins/Portable/pmp_activesync/activesync/Inc/rapi2.h b/Src/Plugins/Portable/pmp_activesync/activesync/Inc/rapi2.h
new file mode 100644
index 00000000..6d930758
--- /dev/null
+++ b/Src/Plugins/Portable/pmp_activesync/activesync/Inc/rapi2.h
@@ -0,0 +1,3090 @@
+
+
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+ /* File created by MIDL compiler version 6.00.0361 */
+/* at Fri Apr 22 19:21:11 2005
+ */
+/* Compiler settings for .\RAPI2.idl:
+ Oicf, W1, Zp8, env=Win32 (32b run)
+ protocol : dce , ms_ext, c_ext, robust
+ error checks: allocation ref bounds_check enum stub_data
+ VC __declspec() decoration level:
+ __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+ DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING( )
+
+#pragma warning( disable: 4049 ) /* more than 64k source lines */
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+#ifndef COM_NO_WINDOWS_H
+#include "windows.h"
+#include "ole2.h"
+#endif /*COM_NO_WINDOWS_H*/
+
+#ifndef __RAPI2_h__
+#define __RAPI2_h__
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+/* Forward Declarations */
+
+#ifndef __IRAPISession_FWD_DEFINED__
+#define __IRAPISession_FWD_DEFINED__
+typedef interface IRAPISession IRAPISession;
+#endif /* __IRAPISession_FWD_DEFINED__ */
+
+
+#ifndef __IRAPIDevice_FWD_DEFINED__
+#define __IRAPIDevice_FWD_DEFINED__
+typedef interface IRAPIDevice IRAPIDevice;
+#endif /* __IRAPIDevice_FWD_DEFINED__ */
+
+
+#ifndef __IRAPIEnumDevices_FWD_DEFINED__
+#define __IRAPIEnumDevices_FWD_DEFINED__
+typedef interface IRAPIEnumDevices IRAPIEnumDevices;
+#endif /* __IRAPIEnumDevices_FWD_DEFINED__ */
+
+
+#ifndef __IRAPISink_FWD_DEFINED__
+#define __IRAPISink_FWD_DEFINED__
+typedef interface IRAPISink IRAPISink;
+#endif /* __IRAPISink_FWD_DEFINED__ */
+
+
+#ifndef __IRAPIDesktop_FWD_DEFINED__
+#define __IRAPIDesktop_FWD_DEFINED__
+typedef interface IRAPIDesktop IRAPIDesktop;
+#endif /* __IRAPIDesktop_FWD_DEFINED__ */
+
+
+#ifndef __RAPI_FWD_DEFINED__
+#define __RAPI_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class RAPI RAPI;
+#else
+typedef struct RAPI RAPI;
+#endif /* __cplusplus */
+
+#endif /* __RAPI_FWD_DEFINED__ */
+
+
+/* header files for imported files */
+#include "oaidl.h"
+#include "ocidl.h"
+#include "rapitypes.h"
+#include "rapitypes2.h"
+#include "irapistream.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+void * __RPC_USER MIDL_user_allocate(size_t);
+void __RPC_USER MIDL_user_free( void * );
+
+/* interface __MIDL_itf_RAPI2_0000 */
+/* [local] */
+
+#define NO_APIMAP 1
+#include "rapi.h"
+#ifndef UNDER_CE
+
+
+extern RPC_IF_HANDLE __MIDL_itf_RAPI2_0000_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_RAPI2_0000_v0_0_s_ifspec;
+
+#ifndef __IRAPISession_INTERFACE_DEFINED__
+#define __IRAPISession_INTERFACE_DEFINED__
+
+/* interface IRAPISession */
+/* [local][unique][uuid][object] */
+
+
+EXTERN_C const IID IID_IRAPISession;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("76a78b7d-8e54-4c06-ac38-459e6a1ab5e3")
+ IRAPISession : public IUnknown
+ {
+ public:
+ virtual HRESULT STDMETHODCALLTYPE CeRapiInit( void) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CeRapiUninit( void) = 0;
+
+ virtual DWORD STDMETHODCALLTYPE CeGetLastError( void) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CeRapiGetError( void) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CeRapiFreeBuffer(
+ void *Buffer) = 0;
+
+ virtual HANDLE STDMETHODCALLTYPE CeFindFirstFile(
+ LPCWSTR FileName,
+ LPCE_FIND_DATA FindData) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeFindNextFile(
+ HANDLE FoundFile,
+ LPCE_FIND_DATA FindData) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeFindClose(
+ HANDLE FoundFile) = 0;
+
+ virtual DWORD STDMETHODCALLTYPE CeGetFileAttributes(
+ LPCWSTR FileName) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeSetFileAttributes(
+ LPCWSTR FileName,
+ DWORD FileAttrib) = 0;
+
+ virtual HANDLE STDMETHODCALLTYPE CeCreateFile(
+ LPCWSTR lpFileName,
+ DWORD dwDesiredAccess,
+ DWORD dwShareMode,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+ DWORD dwCreationDistribution,
+ DWORD dwFlagsAndAttributes,
+ HANDLE hTemplateFile) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeReadFile(
+ HANDLE hFile,
+ LPVOID lpBuffer,
+ DWORD nNumberOfBytesToRead,
+ LPDWORD lpNumberOfBytesRead,
+ LPOVERLAPPED lpOverlapped) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeWriteFile(
+ HANDLE hFile,
+ LPCVOID lpBuffer,
+ DWORD nNumberOfBytesToWrite,
+ LPDWORD lpNumberOfBytesWritten,
+ LPOVERLAPPED lpOverlapped) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeCloseHandle(
+ HANDLE hObject) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeFindAllFiles(
+ LPCWSTR Path,
+ DWORD Flags,
+ LPDWORD pFoundCount,
+ LPLPCE_FIND_DATA ppFindDataArray) = 0;
+
+ virtual HANDLE STDMETHODCALLTYPE CeFindFirstDatabase(
+ DWORD dwDbaseType) = 0;
+
+ virtual CEOID STDMETHODCALLTYPE CeFindNextDatabase(
+ HANDLE hEnum) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeOidGetInfo(
+ CEOID oid,
+ CEOIDINFO *oidInfo) = 0;
+
+ virtual CEOID STDMETHODCALLTYPE CeCreateDatabase(
+ LPWSTR lpszName,
+ DWORD dwDbaseType,
+ WORD cNumSortOrder,
+ SORTORDERSPEC *rgSortSpecs) = 0;
+
+ virtual HANDLE STDMETHODCALLTYPE CeOpenDatabase(
+ PCEOID poid,
+ LPWSTR lpszName,
+ CEPROPID propid,
+ DWORD dwFlags,
+ HWND hwndNotify) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeDeleteDatabase(
+ CEOID oidDbase) = 0;
+
+ virtual CEOID STDMETHODCALLTYPE CeReadRecordProps(
+ HANDLE hDbase,
+ DWORD dwFlags,
+ LPWORD lpcPropID,
+ CEPROPID *rgPropID,
+ LPBYTE *lplpBuffer,
+ LPDWORD lpcbBuffer) = 0;
+
+ virtual CEOID STDMETHODCALLTYPE CeWriteRecordProps(
+ HANDLE hDbase,
+ CEOID oidRecord,
+ WORD cPropID,
+ CEPROPVAL *rgPropVal) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeDeleteRecord(
+ HANDLE hDatabase,
+ CEOID oidRecord) = 0;
+
+ virtual CEOID STDMETHODCALLTYPE CeSeekDatabase(
+ HANDLE hDatabase,
+ DWORD dwSeekType,
+ DWORD dwValue,
+ LPDWORD lpdwIndex) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeSetDatabaseInfo(
+ CEOID oidDbase,
+ CEDBASEINFO *pNewInfo) = 0;
+
+ virtual DWORD STDMETHODCALLTYPE CeSetFilePointer(
+ HANDLE hFile,
+ LONG lDistanceToMove,
+ PLONG lpDistanceToMoveHigh,
+ DWORD dwMoveMethod) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeSetEndOfFile(
+ HANDLE hFile) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeCreateDirectory(
+ LPCWSTR lpPathName,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeRemoveDirectory(
+ LPCWSTR lpPathName) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeCreateProcess(
+ LPCWSTR lpszImageName,
+ LPCWSTR lpszCmdLine,
+ LPSECURITY_ATTRIBUTES lpsaProcess,
+ LPSECURITY_ATTRIBUTES lpsaThread,
+ BOOL fInheritHandles,
+ DWORD fdwCreate,
+ LPVOID lpvEnvironment,
+ LPWSTR lpszCurDir,
+ LPSTARTUPINFOW lpsiStartInfo,
+ LPPROCESS_INFORMATION lppiProcInfo) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeMoveFile(
+ LPCWSTR lpExistingFileName,
+ LPCWSTR lpNewFileName) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeCopyFile(
+ LPCWSTR lpExistingFileName,
+ LPCWSTR lpNewFileName,
+ BOOL bFailIfExists) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeDeleteFile(
+ LPCWSTR FileName) = 0;
+
+ virtual DWORD STDMETHODCALLTYPE CeGetFileSize(
+ HANDLE hFile,
+ LPDWORD lpFileSizeHigh) = 0;
+
+ virtual LONG STDMETHODCALLTYPE CeRegOpenKeyEx(
+ HKEY hKey,
+ LPCWSTR lpszSubKey,
+ DWORD dwReserved,
+ REGSAM samDesired,
+ PHKEY phkResult) = 0;
+
+ virtual LONG STDMETHODCALLTYPE CeRegEnumKeyEx(
+ HKEY hKey,
+ DWORD dwIndex,
+ LPWSTR lpName,
+ LPDWORD lpcbName,
+ LPDWORD lpReserved,
+ LPWSTR lpClass,
+ LPDWORD lpcbClass,
+ PFILETIME lpftLastWriteTime) = 0;
+
+ virtual LONG STDMETHODCALLTYPE CeRegCreateKeyEx(
+ HKEY hKey,
+ LPCWSTR lpszSubKey,
+ DWORD dwReserved,
+ LPWSTR lpszClass,
+ DWORD fdwOptions,
+ REGSAM samDesired,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+ PHKEY phkResult,
+ LPDWORD lpdwDisposition) = 0;
+
+ virtual LONG STDMETHODCALLTYPE CeRegCloseKey(
+ HKEY hKey) = 0;
+
+ virtual LONG STDMETHODCALLTYPE CeRegDeleteKey(
+ HKEY hKey,
+ LPCWSTR lpszSubKey) = 0;
+
+ virtual LONG STDMETHODCALLTYPE CeRegEnumValue(
+ HKEY hKey,
+ DWORD dwIndex,
+ LPWSTR lpszValueName,
+ LPDWORD lpcbValueName,
+ LPDWORD lpReserved,
+ LPDWORD lpType,
+ LPBYTE lpData,
+ LPDWORD lpcbData) = 0;
+
+ virtual LONG STDMETHODCALLTYPE CeRegDeleteValue(
+ HKEY hKey,
+ LPCWSTR lpszValueName) = 0;
+
+ virtual LONG STDMETHODCALLTYPE CeRegQueryInfoKey(
+ HKEY hKey,
+ LPWSTR lpClass,
+ LPDWORD lpcbClass,
+ LPDWORD lpReserved,
+ LPDWORD lpcSubKeys,
+ LPDWORD lpcbMaxSubKeyLen,
+ LPDWORD lpcbMaxClassLen,
+ LPDWORD lpcValues,
+ LPDWORD lpcbMaxValueNameLen,
+ LPDWORD lpcbMaxValueLen,
+ LPDWORD lpcbSecurityDescriptor,
+ PFILETIME lpftLastWriteTime) = 0;
+
+ virtual LONG STDMETHODCALLTYPE CeRegQueryValueEx(
+ HKEY hKey,
+ LPCWSTR lpValueName,
+ LPDWORD lpReserved,
+ LPDWORD lpType,
+ LPBYTE lpData,
+ LPDWORD lpcbData) = 0;
+
+ virtual LONG STDMETHODCALLTYPE CeRegSetValueEx(
+ HKEY hKey,
+ LPCWSTR lpValueName,
+ DWORD Reserved,
+ DWORD dwType,
+ BYTE *lpData,
+ DWORD cbData) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeGetStoreInformation(
+ LPSTORE_INFORMATION lpsi) = 0;
+
+ virtual INT STDMETHODCALLTYPE CeGetSystemMetrics(
+ INT nIndex) = 0;
+
+ virtual INT STDMETHODCALLTYPE CeGetDesktopDeviceCaps(
+ INT nIndex) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeFindAllDatabases(
+ DWORD DbaseType,
+ WORD Flags,
+ LPWORD cFindData,
+ LPLPCEDB_FIND_DATA ppFindData) = 0;
+
+ virtual void STDMETHODCALLTYPE CeGetSystemInfo(
+ LPSYSTEM_INFO lpSystemInfo) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeSHCreateShortcut(
+ LPWSTR lpszShortcut,
+ LPWSTR lpszTarget) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeSHGetShortcutTarget(
+ LPWSTR lpszShortcut,
+ LPWSTR lpszTarget,
+ int cbMax) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeCheckPassword(
+ LPWSTR lpszPassword) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeGetFileTime(
+ HANDLE hFile,
+ LPFILETIME lpCreationTime,
+ LPFILETIME lpLastAccessTime,
+ LPFILETIME lpLastWriteTime) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeSetFileTime(
+ HANDLE hFile,
+ FILETIME *lpCreationTime,
+ FILETIME *lpLastAccessTime,
+ FILETIME *lpLastWriteTime) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeGetVersionEx(
+ LPCEOSVERSIONINFO lpVersionInformation) = 0;
+
+ virtual HWND STDMETHODCALLTYPE CeGetWindow(
+ HWND hWnd,
+ UINT uCmd) = 0;
+
+ virtual LONG STDMETHODCALLTYPE CeGetWindowLong(
+ HWND hWnd,
+ int nIndex) = 0;
+
+ virtual INT STDMETHODCALLTYPE CeGetWindowText(
+ HWND hWnd,
+ LPWSTR lpString,
+ int nMaxCount) = 0;
+
+ virtual INT STDMETHODCALLTYPE CeGetClassName(
+ HWND hWnd,
+ LPWSTR lpClassName,
+ int nMaxCount) = 0;
+
+ virtual void STDMETHODCALLTYPE CeGlobalMemoryStatus(
+ LPMEMORYSTATUS lpmst) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeGetSystemPowerStatusEx(
+ PSYSTEM_POWER_STATUS_EX pstatus,
+ BOOL fUpdate) = 0;
+
+ virtual DWORD STDMETHODCALLTYPE CeGetTempPath(
+ DWORD nBufferLength,
+ LPWSTR lpBuffer) = 0;
+
+ virtual DWORD STDMETHODCALLTYPE CeGetSpecialFolderPath(
+ int nFolder,
+ DWORD nBufferLength,
+ LPWSTR lpBuffer) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CeRapiInvoke(
+ LPCWSTR pDllPath,
+ LPCWSTR pFunctionName,
+ DWORD cbInput,
+ BYTE *pInput,
+ DWORD *pcbOutput,
+ BYTE **ppOutput,
+ IRAPIStream **ppIRAPIStream,
+ DWORD dwReserved) = 0;
+
+ virtual HANDLE STDMETHODCALLTYPE CeFindFirstDatabaseEx(
+ PCEGUID pguid,
+ DWORD dwDbaseType) = 0;
+
+ virtual CEOID STDMETHODCALLTYPE CeFindNextDatabaseEx(
+ HANDLE hEnum,
+ PCEGUID pguid) = 0;
+
+ virtual CEOID STDMETHODCALLTYPE CeCreateDatabaseEx(
+ PCEGUID pceguid,
+ CEDBASEINFO *lpCEDBInfo) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeSetDatabaseInfoEx(
+ PCEGUID pceguid,
+ CEOID oidDbase,
+ CEDBASEINFO *pNewInfo) = 0;
+
+ virtual HANDLE STDMETHODCALLTYPE CeOpenDatabaseEx(
+ PCEGUID pceguid,
+ PCEOID poid,
+ LPWSTR lpszName,
+ CEPROPID propid,
+ DWORD dwFlags,
+ CENOTIFYREQUEST *pReq) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeDeleteDatabaseEx(
+ PCEGUID pceguid,
+ CEOID oidDbase) = 0;
+
+ virtual CEOID STDMETHODCALLTYPE CeReadRecordPropsEx(
+ HANDLE hDbase,
+ DWORD dwFlags,
+ LPWORD lpcPropID,
+ CEPROPID *rgPropID,
+ LPBYTE *lplpBuffer,
+ LPDWORD lpcbBuffer,
+ HANDLE hHeap) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeMountDBVol(
+ PCEGUID pceguid,
+ LPWSTR lpszDBVol,
+ DWORD dwFlags) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeUnmountDBVol(
+ PCEGUID pceguid) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeFlushDBVol(
+ PCEGUID pceguid) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeEnumDBVolumes(
+ PCEGUID pceguid,
+ LPWSTR lpBuf,
+ DWORD dwNumChars) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeOidGetInfoEx(
+ PCEGUID pceguid,
+ CEOID oid,
+ CEOIDINFO *oidInfo) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CeSyncStart(
+ LPCWSTR szCommand) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CeSyncStop( void) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeQueryInstructionSet(
+ DWORD dwInstructionSet,
+ LPDWORD lpdwCurrentInstructionSet) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE CeGetDiskFreeSpaceEx(
+ LPCWSTR lpDirectoryName,
+ ULARGE_INTEGER *lpFreeBytesAvailableToCaller,
+ ULARGE_INTEGER *lpTotalNumberOfBytes,
+ ULARGE_INTEGER *lpTotalNumberOfFreeBytes) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IRAPISessionVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IRAPISession * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IRAPISession * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IRAPISession * This);
+
+ HRESULT ( STDMETHODCALLTYPE *CeRapiInit )(
+ IRAPISession * This);
+
+ HRESULT ( STDMETHODCALLTYPE *CeRapiUninit )(
+ IRAPISession * This);
+
+ DWORD ( STDMETHODCALLTYPE *CeGetLastError )(
+ IRAPISession * This);
+
+ HRESULT ( STDMETHODCALLTYPE *CeRapiGetError )(
+ IRAPISession * This);
+
+ HRESULT ( STDMETHODCALLTYPE *CeRapiFreeBuffer )(
+ IRAPISession * This,
+ void *Buffer);
+
+ HANDLE ( STDMETHODCALLTYPE *CeFindFirstFile )(
+ IRAPISession * This,
+ LPCWSTR FileName,
+ LPCE_FIND_DATA FindData);
+
+ BOOL ( STDMETHODCALLTYPE *CeFindNextFile )(
+ IRAPISession * This,
+ HANDLE FoundFile,
+ LPCE_FIND_DATA FindData);
+
+ BOOL ( STDMETHODCALLTYPE *CeFindClose )(
+ IRAPISession * This,
+ HANDLE FoundFile);
+
+ DWORD ( STDMETHODCALLTYPE *CeGetFileAttributes )(
+ IRAPISession * This,
+ LPCWSTR FileName);
+
+ BOOL ( STDMETHODCALLTYPE *CeSetFileAttributes )(
+ IRAPISession * This,
+ LPCWSTR FileName,
+ DWORD FileAttrib);
+
+ HANDLE ( STDMETHODCALLTYPE *CeCreateFile )(
+ IRAPISession * This,
+ LPCWSTR lpFileName,
+ DWORD dwDesiredAccess,
+ DWORD dwShareMode,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+ DWORD dwCreationDistribution,
+ DWORD dwFlagsAndAttributes,
+ HANDLE hTemplateFile);
+
+ BOOL ( STDMETHODCALLTYPE *CeReadFile )(
+ IRAPISession * This,
+ HANDLE hFile,
+ LPVOID lpBuffer,
+ DWORD nNumberOfBytesToRead,
+ LPDWORD lpNumberOfBytesRead,
+ LPOVERLAPPED lpOverlapped);
+
+ BOOL ( STDMETHODCALLTYPE *CeWriteFile )(
+ IRAPISession * This,
+ HANDLE hFile,
+ LPCVOID lpBuffer,
+ DWORD nNumberOfBytesToWrite,
+ LPDWORD lpNumberOfBytesWritten,
+ LPOVERLAPPED lpOverlapped);
+
+ BOOL ( STDMETHODCALLTYPE *CeCloseHandle )(
+ IRAPISession * This,
+ HANDLE hObject);
+
+ BOOL ( STDMETHODCALLTYPE *CeFindAllFiles )(
+ IRAPISession * This,
+ LPCWSTR Path,
+ DWORD Flags,
+ LPDWORD pFoundCount,
+ LPLPCE_FIND_DATA ppFindDataArray);
+
+ HANDLE ( STDMETHODCALLTYPE *CeFindFirstDatabase )(
+ IRAPISession * This,
+ DWORD dwDbaseType);
+
+ CEOID ( STDMETHODCALLTYPE *CeFindNextDatabase )(
+ IRAPISession * This,
+ HANDLE hEnum);
+
+ BOOL ( STDMETHODCALLTYPE *CeOidGetInfo )(
+ IRAPISession * This,
+ CEOID oid,
+ CEOIDINFO *oidInfo);
+
+ CEOID ( STDMETHODCALLTYPE *CeCreateDatabase )(
+ IRAPISession * This,
+ LPWSTR lpszName,
+ DWORD dwDbaseType,
+ WORD cNumSortOrder,
+ SORTORDERSPEC *rgSortSpecs);
+
+ HANDLE ( STDMETHODCALLTYPE *CeOpenDatabase )(
+ IRAPISession * This,
+ PCEOID poid,
+ LPWSTR lpszName,
+ CEPROPID propid,
+ DWORD dwFlags,
+ HWND hwndNotify);
+
+ BOOL ( STDMETHODCALLTYPE *CeDeleteDatabase )(
+ IRAPISession * This,
+ CEOID oidDbase);
+
+ CEOID ( STDMETHODCALLTYPE *CeReadRecordProps )(
+ IRAPISession * This,
+ HANDLE hDbase,
+ DWORD dwFlags,
+ LPWORD lpcPropID,
+ CEPROPID *rgPropID,
+ LPBYTE *lplpBuffer,
+ LPDWORD lpcbBuffer);
+
+ CEOID ( STDMETHODCALLTYPE *CeWriteRecordProps )(
+ IRAPISession * This,
+ HANDLE hDbase,
+ CEOID oidRecord,
+ WORD cPropID,
+ CEPROPVAL *rgPropVal);
+
+ BOOL ( STDMETHODCALLTYPE *CeDeleteRecord )(
+ IRAPISession * This,
+ HANDLE hDatabase,
+ CEOID oidRecord);
+
+ CEOID ( STDMETHODCALLTYPE *CeSeekDatabase )(
+ IRAPISession * This,
+ HANDLE hDatabase,
+ DWORD dwSeekType,
+ DWORD dwValue,
+ LPDWORD lpdwIndex);
+
+ BOOL ( STDMETHODCALLTYPE *CeSetDatabaseInfo )(
+ IRAPISession * This,
+ CEOID oidDbase,
+ CEDBASEINFO *pNewInfo);
+
+ DWORD ( STDMETHODCALLTYPE *CeSetFilePointer )(
+ IRAPISession * This,
+ HANDLE hFile,
+ LONG lDistanceToMove,
+ PLONG lpDistanceToMoveHigh,
+ DWORD dwMoveMethod);
+
+ BOOL ( STDMETHODCALLTYPE *CeSetEndOfFile )(
+ IRAPISession * This,
+ HANDLE hFile);
+
+ BOOL ( STDMETHODCALLTYPE *CeCreateDirectory )(
+ IRAPISession * This,
+ LPCWSTR lpPathName,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes);
+
+ BOOL ( STDMETHODCALLTYPE *CeRemoveDirectory )(
+ IRAPISession * This,
+ LPCWSTR lpPathName);
+
+ BOOL ( STDMETHODCALLTYPE *CeCreateProcess )(
+ IRAPISession * This,
+ LPCWSTR lpszImageName,
+ LPCWSTR lpszCmdLine,
+ LPSECURITY_ATTRIBUTES lpsaProcess,
+ LPSECURITY_ATTRIBUTES lpsaThread,
+ BOOL fInheritHandles,
+ DWORD fdwCreate,
+ LPVOID lpvEnvironment,
+ LPWSTR lpszCurDir,
+ LPSTARTUPINFOW lpsiStartInfo,
+ LPPROCESS_INFORMATION lppiProcInfo);
+
+ BOOL ( STDMETHODCALLTYPE *CeMoveFile )(
+ IRAPISession * This,
+ LPCWSTR lpExistingFileName,
+ LPCWSTR lpNewFileName);
+
+ BOOL ( STDMETHODCALLTYPE *CeCopyFile )(
+ IRAPISession * This,
+ LPCWSTR lpExistingFileName,
+ LPCWSTR lpNewFileName,
+ BOOL bFailIfExists);
+
+ BOOL ( STDMETHODCALLTYPE *CeDeleteFile )(
+ IRAPISession * This,
+ LPCWSTR FileName);
+
+ DWORD ( STDMETHODCALLTYPE *CeGetFileSize )(
+ IRAPISession * This,
+ HANDLE hFile,
+ LPDWORD lpFileSizeHigh);
+
+ LONG ( STDMETHODCALLTYPE *CeRegOpenKeyEx )(
+ IRAPISession * This,
+ HKEY hKey,
+ LPCWSTR lpszSubKey,
+ DWORD dwReserved,
+ REGSAM samDesired,
+ PHKEY phkResult);
+
+ LONG ( STDMETHODCALLTYPE *CeRegEnumKeyEx )(
+ IRAPISession * This,
+ HKEY hKey,
+ DWORD dwIndex,
+ LPWSTR lpName,
+ LPDWORD lpcbName,
+ LPDWORD lpReserved,
+ LPWSTR lpClass,
+ LPDWORD lpcbClass,
+ PFILETIME lpftLastWriteTime);
+
+ LONG ( STDMETHODCALLTYPE *CeRegCreateKeyEx )(
+ IRAPISession * This,
+ HKEY hKey,
+ LPCWSTR lpszSubKey,
+ DWORD dwReserved,
+ LPWSTR lpszClass,
+ DWORD fdwOptions,
+ REGSAM samDesired,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+ PHKEY phkResult,
+ LPDWORD lpdwDisposition);
+
+ LONG ( STDMETHODCALLTYPE *CeRegCloseKey )(
+ IRAPISession * This,
+ HKEY hKey);
+
+ LONG ( STDMETHODCALLTYPE *CeRegDeleteKey )(
+ IRAPISession * This,
+ HKEY hKey,
+ LPCWSTR lpszSubKey);
+
+ LONG ( STDMETHODCALLTYPE *CeRegEnumValue )(
+ IRAPISession * This,
+ HKEY hKey,
+ DWORD dwIndex,
+ LPWSTR lpszValueName,
+ LPDWORD lpcbValueName,
+ LPDWORD lpReserved,
+ LPDWORD lpType,
+ LPBYTE lpData,
+ LPDWORD lpcbData);
+
+ LONG ( STDMETHODCALLTYPE *CeRegDeleteValue )(
+ IRAPISession * This,
+ HKEY hKey,
+ LPCWSTR lpszValueName);
+
+ LONG ( STDMETHODCALLTYPE *CeRegQueryInfoKey )(
+ IRAPISession * This,
+ HKEY hKey,
+ LPWSTR lpClass,
+ LPDWORD lpcbClass,
+ LPDWORD lpReserved,
+ LPDWORD lpcSubKeys,
+ LPDWORD lpcbMaxSubKeyLen,
+ LPDWORD lpcbMaxClassLen,
+ LPDWORD lpcValues,
+ LPDWORD lpcbMaxValueNameLen,
+ LPDWORD lpcbMaxValueLen,
+ LPDWORD lpcbSecurityDescriptor,
+ PFILETIME lpftLastWriteTime);
+
+ LONG ( STDMETHODCALLTYPE *CeRegQueryValueEx )(
+ IRAPISession * This,
+ HKEY hKey,
+ LPCWSTR lpValueName,
+ LPDWORD lpReserved,
+ LPDWORD lpType,
+ LPBYTE lpData,
+ LPDWORD lpcbData);
+
+ LONG ( STDMETHODCALLTYPE *CeRegSetValueEx )(
+ IRAPISession * This,
+ HKEY hKey,
+ LPCWSTR lpValueName,
+ DWORD Reserved,
+ DWORD dwType,
+ BYTE *lpData,
+ DWORD cbData);
+
+ BOOL ( STDMETHODCALLTYPE *CeGetStoreInformation )(
+ IRAPISession * This,
+ LPSTORE_INFORMATION lpsi);
+
+ INT ( STDMETHODCALLTYPE *CeGetSystemMetrics )(
+ IRAPISession * This,
+ INT nIndex);
+
+ INT ( STDMETHODCALLTYPE *CeGetDesktopDeviceCaps )(
+ IRAPISession * This,
+ INT nIndex);
+
+ BOOL ( STDMETHODCALLTYPE *CeFindAllDatabases )(
+ IRAPISession * This,
+ DWORD DbaseType,
+ WORD Flags,
+ LPWORD cFindData,
+ LPLPCEDB_FIND_DATA ppFindData);
+
+ void ( STDMETHODCALLTYPE *CeGetSystemInfo )(
+ IRAPISession * This,
+ LPSYSTEM_INFO lpSystemInfo);
+
+ BOOL ( STDMETHODCALLTYPE *CeSHCreateShortcut )(
+ IRAPISession * This,
+ LPWSTR lpszShortcut,
+ LPWSTR lpszTarget);
+
+ BOOL ( STDMETHODCALLTYPE *CeSHGetShortcutTarget )(
+ IRAPISession * This,
+ LPWSTR lpszShortcut,
+ LPWSTR lpszTarget,
+ int cbMax);
+
+ BOOL ( STDMETHODCALLTYPE *CeCheckPassword )(
+ IRAPISession * This,
+ LPWSTR lpszPassword);
+
+ BOOL ( STDMETHODCALLTYPE *CeGetFileTime )(
+ IRAPISession * This,
+ HANDLE hFile,
+ LPFILETIME lpCreationTime,
+ LPFILETIME lpLastAccessTime,
+ LPFILETIME lpLastWriteTime);
+
+ BOOL ( STDMETHODCALLTYPE *CeSetFileTime )(
+ IRAPISession * This,
+ HANDLE hFile,
+ FILETIME *lpCreationTime,
+ FILETIME *lpLastAccessTime,
+ FILETIME *lpLastWriteTime);
+
+ BOOL ( STDMETHODCALLTYPE *CeGetVersionEx )(
+ IRAPISession * This,
+ LPCEOSVERSIONINFO lpVersionInformation);
+
+ HWND ( STDMETHODCALLTYPE *CeGetWindow )(
+ IRAPISession * This,
+ HWND hWnd,
+ UINT uCmd);
+
+ LONG ( STDMETHODCALLTYPE *CeGetWindowLong )(
+ IRAPISession * This,
+ HWND hWnd,
+ int nIndex);
+
+ INT ( STDMETHODCALLTYPE *CeGetWindowText )(
+ IRAPISession * This,
+ HWND hWnd,
+ LPWSTR lpString,
+ int nMaxCount);
+
+ INT ( STDMETHODCALLTYPE *CeGetClassName )(
+ IRAPISession * This,
+ HWND hWnd,
+ LPWSTR lpClassName,
+ int nMaxCount);
+
+ void ( STDMETHODCALLTYPE *CeGlobalMemoryStatus )(
+ IRAPISession * This,
+ LPMEMORYSTATUS lpmst);
+
+ BOOL ( STDMETHODCALLTYPE *CeGetSystemPowerStatusEx )(
+ IRAPISession * This,
+ PSYSTEM_POWER_STATUS_EX pstatus,
+ BOOL fUpdate);
+
+ DWORD ( STDMETHODCALLTYPE *CeGetTempPath )(
+ IRAPISession * This,
+ DWORD nBufferLength,
+ LPWSTR lpBuffer);
+
+ DWORD ( STDMETHODCALLTYPE *CeGetSpecialFolderPath )(
+ IRAPISession * This,
+ int nFolder,
+ DWORD nBufferLength,
+ LPWSTR lpBuffer);
+
+ HRESULT ( STDMETHODCALLTYPE *CeRapiInvoke )(
+ IRAPISession * This,
+ LPCWSTR pDllPath,
+ LPCWSTR pFunctionName,
+ DWORD cbInput,
+ BYTE *pInput,
+ DWORD *pcbOutput,
+ BYTE **ppOutput,
+ IRAPIStream **ppIRAPIStream,
+ DWORD dwReserved);
+
+ HANDLE ( STDMETHODCALLTYPE *CeFindFirstDatabaseEx )(
+ IRAPISession * This,
+ PCEGUID pguid,
+ DWORD dwDbaseType);
+
+ CEOID ( STDMETHODCALLTYPE *CeFindNextDatabaseEx )(
+ IRAPISession * This,
+ HANDLE hEnum,
+ PCEGUID pguid);
+
+ CEOID ( STDMETHODCALLTYPE *CeCreateDatabaseEx )(
+ IRAPISession * This,
+ PCEGUID pceguid,
+ CEDBASEINFO *lpCEDBInfo);
+
+ BOOL ( STDMETHODCALLTYPE *CeSetDatabaseInfoEx )(
+ IRAPISession * This,
+ PCEGUID pceguid,
+ CEOID oidDbase,
+ CEDBASEINFO *pNewInfo);
+
+ HANDLE ( STDMETHODCALLTYPE *CeOpenDatabaseEx )(
+ IRAPISession * This,
+ PCEGUID pceguid,
+ PCEOID poid,
+ LPWSTR lpszName,
+ CEPROPID propid,
+ DWORD dwFlags,
+ CENOTIFYREQUEST *pReq);
+
+ BOOL ( STDMETHODCALLTYPE *CeDeleteDatabaseEx )(
+ IRAPISession * This,
+ PCEGUID pceguid,
+ CEOID oidDbase);
+
+ CEOID ( STDMETHODCALLTYPE *CeReadRecordPropsEx )(
+ IRAPISession * This,
+ HANDLE hDbase,
+ DWORD dwFlags,
+ LPWORD lpcPropID,
+ CEPROPID *rgPropID,
+ LPBYTE *lplpBuffer,
+ LPDWORD lpcbBuffer,
+ HANDLE hHeap);
+
+ BOOL ( STDMETHODCALLTYPE *CeMountDBVol )(
+ IRAPISession * This,
+ PCEGUID pceguid,
+ LPWSTR lpszDBVol,
+ DWORD dwFlags);
+
+ BOOL ( STDMETHODCALLTYPE *CeUnmountDBVol )(
+ IRAPISession * This,
+ PCEGUID pceguid);
+
+ BOOL ( STDMETHODCALLTYPE *CeFlushDBVol )(
+ IRAPISession * This,
+ PCEGUID pceguid);
+
+ BOOL ( STDMETHODCALLTYPE *CeEnumDBVolumes )(
+ IRAPISession * This,
+ PCEGUID pceguid,
+ LPWSTR lpBuf,
+ DWORD dwNumChars);
+
+ BOOL ( STDMETHODCALLTYPE *CeOidGetInfoEx )(
+ IRAPISession * This,
+ PCEGUID pceguid,
+ CEOID oid,
+ CEOIDINFO *oidInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *CeSyncStart )(
+ IRAPISession * This,
+ LPCWSTR szCommand);
+
+ HRESULT ( STDMETHODCALLTYPE *CeSyncStop )(
+ IRAPISession * This);
+
+ BOOL ( STDMETHODCALLTYPE *CeQueryInstructionSet )(
+ IRAPISession * This,
+ DWORD dwInstructionSet,
+ LPDWORD lpdwCurrentInstructionSet);
+
+ BOOL ( STDMETHODCALLTYPE *CeGetDiskFreeSpaceEx )(
+ IRAPISession * This,
+ LPCWSTR lpDirectoryName,
+ ULARGE_INTEGER *lpFreeBytesAvailableToCaller,
+ ULARGE_INTEGER *lpTotalNumberOfBytes,
+ ULARGE_INTEGER *lpTotalNumberOfFreeBytes);
+
+ END_INTERFACE
+ } IRAPISessionVtbl;
+
+ interface IRAPISession
+ {
+ CONST_VTBL struct IRAPISessionVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IRAPISession_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IRAPISession_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IRAPISession_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IRAPISession_CeRapiInit(This) \
+ (This)->lpVtbl -> CeRapiInit(This)
+
+#define IRAPISession_CeRapiUninit(This) \
+ (This)->lpVtbl -> CeRapiUninit(This)
+
+#define IRAPISession_CeGetLastError(This) \
+ (This)->lpVtbl -> CeGetLastError(This)
+
+#define IRAPISession_CeRapiGetError(This) \
+ (This)->lpVtbl -> CeRapiGetError(This)
+
+#define IRAPISession_CeRapiFreeBuffer(This,Buffer) \
+ (This)->lpVtbl -> CeRapiFreeBuffer(This,Buffer)
+
+#define IRAPISession_CeFindFirstFile(This,FileName,FindData) \
+ (This)->lpVtbl -> CeFindFirstFile(This,FileName,FindData)
+
+#define IRAPISession_CeFindNextFile(This,FoundFile,FindData) \
+ (This)->lpVtbl -> CeFindNextFile(This,FoundFile,FindData)
+
+#define IRAPISession_CeFindClose(This,FoundFile) \
+ (This)->lpVtbl -> CeFindClose(This,FoundFile)
+
+#define IRAPISession_CeGetFileAttributes(This,FileName) \
+ (This)->lpVtbl -> CeGetFileAttributes(This,FileName)
+
+#define IRAPISession_CeSetFileAttributes(This,FileName,FileAttrib) \
+ (This)->lpVtbl -> CeSetFileAttributes(This,FileName,FileAttrib)
+
+#define IRAPISession_CeCreateFile(This,lpFileName,dwDesiredAccess,dwShareMode,lpSecurityAttributes,dwCreationDistribution,dwFlagsAndAttributes,hTemplateFile) \
+ (This)->lpVtbl -> CeCreateFile(This,lpFileName,dwDesiredAccess,dwShareMode,lpSecurityAttributes,dwCreationDistribution,dwFlagsAndAttributes,hTemplateFile)
+
+#define IRAPISession_CeReadFile(This,hFile,lpBuffer,nNumberOfBytesToRead,lpNumberOfBytesRead,lpOverlapped) \
+ (This)->lpVtbl -> CeReadFile(This,hFile,lpBuffer,nNumberOfBytesToRead,lpNumberOfBytesRead,lpOverlapped)
+
+#define IRAPISession_CeWriteFile(This,hFile,lpBuffer,nNumberOfBytesToWrite,lpNumberOfBytesWritten,lpOverlapped) \
+ (This)->lpVtbl -> CeWriteFile(This,hFile,lpBuffer,nNumberOfBytesToWrite,lpNumberOfBytesWritten,lpOverlapped)
+
+#define IRAPISession_CeCloseHandle(This,hObject) \
+ (This)->lpVtbl -> CeCloseHandle(This,hObject)
+
+#define IRAPISession_CeFindAllFiles(This,Path,Flags,pFoundCount,ppFindDataArray) \
+ (This)->lpVtbl -> CeFindAllFiles(This,Path,Flags,pFoundCount,ppFindDataArray)
+
+#define IRAPISession_CeFindFirstDatabase(This,dwDbaseType) \
+ (This)->lpVtbl -> CeFindFirstDatabase(This,dwDbaseType)
+
+#define IRAPISession_CeFindNextDatabase(This,hEnum) \
+ (This)->lpVtbl -> CeFindNextDatabase(This,hEnum)
+
+#define IRAPISession_CeOidGetInfo(This,oid,oidInfo) \
+ (This)->lpVtbl -> CeOidGetInfo(This,oid,oidInfo)
+
+#define IRAPISession_CeCreateDatabase(This,lpszName,dwDbaseType,cNumSortOrder,rgSortSpecs) \
+ (This)->lpVtbl -> CeCreateDatabase(This,lpszName,dwDbaseType,cNumSortOrder,rgSortSpecs)
+
+#define IRAPISession_CeOpenDatabase(This,poid,lpszName,propid,dwFlags,hwndNotify) \
+ (This)->lpVtbl -> CeOpenDatabase(This,poid,lpszName,propid,dwFlags,hwndNotify)
+
+#define IRAPISession_CeDeleteDatabase(This,oidDbase) \
+ (This)->lpVtbl -> CeDeleteDatabase(This,oidDbase)
+
+#define IRAPISession_CeReadRecordProps(This,hDbase,dwFlags,lpcPropID,rgPropID,lplpBuffer,lpcbBuffer) \
+ (This)->lpVtbl -> CeReadRecordProps(This,hDbase,dwFlags,lpcPropID,rgPropID,lplpBuffer,lpcbBuffer)
+
+#define IRAPISession_CeWriteRecordProps(This,hDbase,oidRecord,cPropID,rgPropVal) \
+ (This)->lpVtbl -> CeWriteRecordProps(This,hDbase,oidRecord,cPropID,rgPropVal)
+
+#define IRAPISession_CeDeleteRecord(This,hDatabase,oidRecord) \
+ (This)->lpVtbl -> CeDeleteRecord(This,hDatabase,oidRecord)
+
+#define IRAPISession_CeSeekDatabase(This,hDatabase,dwSeekType,dwValue,lpdwIndex) \
+ (This)->lpVtbl -> CeSeekDatabase(This,hDatabase,dwSeekType,dwValue,lpdwIndex)
+
+#define IRAPISession_CeSetDatabaseInfo(This,oidDbase,pNewInfo) \
+ (This)->lpVtbl -> CeSetDatabaseInfo(This,oidDbase,pNewInfo)
+
+#define IRAPISession_CeSetFilePointer(This,hFile,lDistanceToMove,lpDistanceToMoveHigh,dwMoveMethod) \
+ (This)->lpVtbl -> CeSetFilePointer(This,hFile,lDistanceToMove,lpDistanceToMoveHigh,dwMoveMethod)
+
+#define IRAPISession_CeSetEndOfFile(This,hFile) \
+ (This)->lpVtbl -> CeSetEndOfFile(This,hFile)
+
+#define IRAPISession_CeCreateDirectory(This,lpPathName,lpSecurityAttributes) \
+ (This)->lpVtbl -> CeCreateDirectory(This,lpPathName,lpSecurityAttributes)
+
+#define IRAPISession_CeRemoveDirectory(This,lpPathName) \
+ (This)->lpVtbl -> CeRemoveDirectory(This,lpPathName)
+
+#define IRAPISession_CeCreateProcess(This,lpszImageName,lpszCmdLine,lpsaProcess,lpsaThread,fInheritHandles,fdwCreate,lpvEnvironment,lpszCurDir,lpsiStartInfo,lppiProcInfo) \
+ (This)->lpVtbl -> CeCreateProcess(This,lpszImageName,lpszCmdLine,lpsaProcess,lpsaThread,fInheritHandles,fdwCreate,lpvEnvironment,lpszCurDir,lpsiStartInfo,lppiProcInfo)
+
+#define IRAPISession_CeMoveFile(This,lpExistingFileName,lpNewFileName) \
+ (This)->lpVtbl -> CeMoveFile(This,lpExistingFileName,lpNewFileName)
+
+#define IRAPISession_CeCopyFile(This,lpExistingFileName,lpNewFileName,bFailIfExists) \
+ (This)->lpVtbl -> CeCopyFile(This,lpExistingFileName,lpNewFileName,bFailIfExists)
+
+#define IRAPISession_CeDeleteFile(This,FileName) \
+ (This)->lpVtbl -> CeDeleteFile(This,FileName)
+
+#define IRAPISession_CeGetFileSize(This,hFile,lpFileSizeHigh) \
+ (This)->lpVtbl -> CeGetFileSize(This,hFile,lpFileSizeHigh)
+
+#define IRAPISession_CeRegOpenKeyEx(This,hKey,lpszSubKey,dwReserved,samDesired,phkResult) \
+ (This)->lpVtbl -> CeRegOpenKeyEx(This,hKey,lpszSubKey,dwReserved,samDesired,phkResult)
+
+#define IRAPISession_CeRegEnumKeyEx(This,hKey,dwIndex,lpName,lpcbName,lpReserved,lpClass,lpcbClass,lpftLastWriteTime) \
+ (This)->lpVtbl -> CeRegEnumKeyEx(This,hKey,dwIndex,lpName,lpcbName,lpReserved,lpClass,lpcbClass,lpftLastWriteTime)
+
+#define IRAPISession_CeRegCreateKeyEx(This,hKey,lpszSubKey,dwReserved,lpszClass,fdwOptions,samDesired,lpSecurityAttributes,phkResult,lpdwDisposition) \
+ (This)->lpVtbl -> CeRegCreateKeyEx(This,hKey,lpszSubKey,dwReserved,lpszClass,fdwOptions,samDesired,lpSecurityAttributes,phkResult,lpdwDisposition)
+
+#define IRAPISession_CeRegCloseKey(This,hKey) \
+ (This)->lpVtbl -> CeRegCloseKey(This,hKey)
+
+#define IRAPISession_CeRegDeleteKey(This,hKey,lpszSubKey) \
+ (This)->lpVtbl -> CeRegDeleteKey(This,hKey,lpszSubKey)
+
+#define IRAPISession_CeRegEnumValue(This,hKey,dwIndex,lpszValueName,lpcbValueName,lpReserved,lpType,lpData,lpcbData) \
+ (This)->lpVtbl -> CeRegEnumValue(This,hKey,dwIndex,lpszValueName,lpcbValueName,lpReserved,lpType,lpData,lpcbData)
+
+#define IRAPISession_CeRegDeleteValue(This,hKey,lpszValueName) \
+ (This)->lpVtbl -> CeRegDeleteValue(This,hKey,lpszValueName)
+
+#define IRAPISession_CeRegQueryInfoKey(This,hKey,lpClass,lpcbClass,lpReserved,lpcSubKeys,lpcbMaxSubKeyLen,lpcbMaxClassLen,lpcValues,lpcbMaxValueNameLen,lpcbMaxValueLen,lpcbSecurityDescriptor,lpftLastWriteTime) \
+ (This)->lpVtbl -> CeRegQueryInfoKey(This,hKey,lpClass,lpcbClass,lpReserved,lpcSubKeys,lpcbMaxSubKeyLen,lpcbMaxClassLen,lpcValues,lpcbMaxValueNameLen,lpcbMaxValueLen,lpcbSecurityDescriptor,lpftLastWriteTime)
+
+#define IRAPISession_CeRegQueryValueEx(This,hKey,lpValueName,lpReserved,lpType,lpData,lpcbData) \
+ (This)->lpVtbl -> CeRegQueryValueEx(This,hKey,lpValueName,lpReserved,lpType,lpData,lpcbData)
+
+#define IRAPISession_CeRegSetValueEx(This,hKey,lpValueName,Reserved,dwType,lpData,cbData) \
+ (This)->lpVtbl -> CeRegSetValueEx(This,hKey,lpValueName,Reserved,dwType,lpData,cbData)
+
+#define IRAPISession_CeGetStoreInformation(This,lpsi) \
+ (This)->lpVtbl -> CeGetStoreInformation(This,lpsi)
+
+#define IRAPISession_CeGetSystemMetrics(This,nIndex) \
+ (This)->lpVtbl -> CeGetSystemMetrics(This,nIndex)
+
+#define IRAPISession_CeGetDesktopDeviceCaps(This,nIndex) \
+ (This)->lpVtbl -> CeGetDesktopDeviceCaps(This,nIndex)
+
+#define IRAPISession_CeFindAllDatabases(This,DbaseType,Flags,cFindData,ppFindData) \
+ (This)->lpVtbl -> CeFindAllDatabases(This,DbaseType,Flags,cFindData,ppFindData)
+
+#define IRAPISession_CeGetSystemInfo(This,lpSystemInfo) \
+ (This)->lpVtbl -> CeGetSystemInfo(This,lpSystemInfo)
+
+#define IRAPISession_CeSHCreateShortcut(This,lpszShortcut,lpszTarget) \
+ (This)->lpVtbl -> CeSHCreateShortcut(This,lpszShortcut,lpszTarget)
+
+#define IRAPISession_CeSHGetShortcutTarget(This,lpszShortcut,lpszTarget,cbMax) \
+ (This)->lpVtbl -> CeSHGetShortcutTarget(This,lpszShortcut,lpszTarget,cbMax)
+
+#define IRAPISession_CeCheckPassword(This,lpszPassword) \
+ (This)->lpVtbl -> CeCheckPassword(This,lpszPassword)
+
+#define IRAPISession_CeGetFileTime(This,hFile,lpCreationTime,lpLastAccessTime,lpLastWriteTime) \
+ (This)->lpVtbl -> CeGetFileTime(This,hFile,lpCreationTime,lpLastAccessTime,lpLastWriteTime)
+
+#define IRAPISession_CeSetFileTime(This,hFile,lpCreationTime,lpLastAccessTime,lpLastWriteTime) \
+ (This)->lpVtbl -> CeSetFileTime(This,hFile,lpCreationTime,lpLastAccessTime,lpLastWriteTime)
+
+#define IRAPISession_CeGetVersionEx(This,lpVersionInformation) \
+ (This)->lpVtbl -> CeGetVersionEx(This,lpVersionInformation)
+
+#define IRAPISession_CeGetWindow(This,hWnd,uCmd) \
+ (This)->lpVtbl -> CeGetWindow(This,hWnd,uCmd)
+
+#define IRAPISession_CeGetWindowLong(This,hWnd,nIndex) \
+ (This)->lpVtbl -> CeGetWindowLong(This,hWnd,nIndex)
+
+#define IRAPISession_CeGetWindowText(This,hWnd,lpString,nMaxCount) \
+ (This)->lpVtbl -> CeGetWindowText(This,hWnd,lpString,nMaxCount)
+
+#define IRAPISession_CeGetClassName(This,hWnd,lpClassName,nMaxCount) \
+ (This)->lpVtbl -> CeGetClassName(This,hWnd,lpClassName,nMaxCount)
+
+#define IRAPISession_CeGlobalMemoryStatus(This,lpmst) \
+ (This)->lpVtbl -> CeGlobalMemoryStatus(This,lpmst)
+
+#define IRAPISession_CeGetSystemPowerStatusEx(This,pstatus,fUpdate) \
+ (This)->lpVtbl -> CeGetSystemPowerStatusEx(This,pstatus,fUpdate)
+
+#define IRAPISession_CeGetTempPath(This,nBufferLength,lpBuffer) \
+ (This)->lpVtbl -> CeGetTempPath(This,nBufferLength,lpBuffer)
+
+#define IRAPISession_CeGetSpecialFolderPath(This,nFolder,nBufferLength,lpBuffer) \
+ (This)->lpVtbl -> CeGetSpecialFolderPath(This,nFolder,nBufferLength,lpBuffer)
+
+#define IRAPISession_CeRapiInvoke(This,pDllPath,pFunctionName,cbInput,pInput,pcbOutput,ppOutput,ppIRAPIStream,dwReserved) \
+ (This)->lpVtbl -> CeRapiInvoke(This,pDllPath,pFunctionName,cbInput,pInput,pcbOutput,ppOutput,ppIRAPIStream,dwReserved)
+
+#define IRAPISession_CeFindFirstDatabaseEx(This,pguid,dwDbaseType) \
+ (This)->lpVtbl -> CeFindFirstDatabaseEx(This,pguid,dwDbaseType)
+
+#define IRAPISession_CeFindNextDatabaseEx(This,hEnum,pguid) \
+ (This)->lpVtbl -> CeFindNextDatabaseEx(This,hEnum,pguid)
+
+#define IRAPISession_CeCreateDatabaseEx(This,pceguid,lpCEDBInfo) \
+ (This)->lpVtbl -> CeCreateDatabaseEx(This,pceguid,lpCEDBInfo)
+
+#define IRAPISession_CeSetDatabaseInfoEx(This,pceguid,oidDbase,pNewInfo) \
+ (This)->lpVtbl -> CeSetDatabaseInfoEx(This,pceguid,oidDbase,pNewInfo)
+
+#define IRAPISession_CeOpenDatabaseEx(This,pceguid,poid,lpszName,propid,dwFlags,pReq) \
+ (This)->lpVtbl -> CeOpenDatabaseEx(This,pceguid,poid,lpszName,propid,dwFlags,pReq)
+
+#define IRAPISession_CeDeleteDatabaseEx(This,pceguid,oidDbase) \
+ (This)->lpVtbl -> CeDeleteDatabaseEx(This,pceguid,oidDbase)
+
+#define IRAPISession_CeReadRecordPropsEx(This,hDbase,dwFlags,lpcPropID,rgPropID,lplpBuffer,lpcbBuffer,hHeap) \
+ (This)->lpVtbl -> CeReadRecordPropsEx(This,hDbase,dwFlags,lpcPropID,rgPropID,lplpBuffer,lpcbBuffer,hHeap)
+
+#define IRAPISession_CeMountDBVol(This,pceguid,lpszDBVol,dwFlags) \
+ (This)->lpVtbl -> CeMountDBVol(This,pceguid,lpszDBVol,dwFlags)
+
+#define IRAPISession_CeUnmountDBVol(This,pceguid) \
+ (This)->lpVtbl -> CeUnmountDBVol(This,pceguid)
+
+#define IRAPISession_CeFlushDBVol(This,pceguid) \
+ (This)->lpVtbl -> CeFlushDBVol(This,pceguid)
+
+#define IRAPISession_CeEnumDBVolumes(This,pceguid,lpBuf,dwNumChars) \
+ (This)->lpVtbl -> CeEnumDBVolumes(This,pceguid,lpBuf,dwNumChars)
+
+#define IRAPISession_CeOidGetInfoEx(This,pceguid,oid,oidInfo) \
+ (This)->lpVtbl -> CeOidGetInfoEx(This,pceguid,oid,oidInfo)
+
+#define IRAPISession_CeSyncStart(This,szCommand) \
+ (This)->lpVtbl -> CeSyncStart(This,szCommand)
+
+#define IRAPISession_CeSyncStop(This) \
+ (This)->lpVtbl -> CeSyncStop(This)
+
+#define IRAPISession_CeQueryInstructionSet(This,dwInstructionSet,lpdwCurrentInstructionSet) \
+ (This)->lpVtbl -> CeQueryInstructionSet(This,dwInstructionSet,lpdwCurrentInstructionSet)
+
+#define IRAPISession_CeGetDiskFreeSpaceEx(This,lpDirectoryName,lpFreeBytesAvailableToCaller,lpTotalNumberOfBytes,lpTotalNumberOfFreeBytes) \
+ (This)->lpVtbl -> CeGetDiskFreeSpaceEx(This,lpDirectoryName,lpFreeBytesAvailableToCaller,lpTotalNumberOfBytes,lpTotalNumberOfFreeBytes)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+HRESULT STDMETHODCALLTYPE IRAPISession_CeRapiInit_Proxy(
+ IRAPISession * This);
+
+
+void __RPC_STUB IRAPISession_CeRapiInit_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IRAPISession_CeRapiUninit_Proxy(
+ IRAPISession * This);
+
+
+void __RPC_STUB IRAPISession_CeRapiUninit_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+DWORD STDMETHODCALLTYPE IRAPISession_CeGetLastError_Proxy(
+ IRAPISession * This);
+
+
+void __RPC_STUB IRAPISession_CeGetLastError_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IRAPISession_CeRapiGetError_Proxy(
+ IRAPISession * This);
+
+
+void __RPC_STUB IRAPISession_CeRapiGetError_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IRAPISession_CeRapiFreeBuffer_Proxy(
+ IRAPISession * This,
+ void *Buffer);
+
+
+void __RPC_STUB IRAPISession_CeRapiFreeBuffer_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HANDLE STDMETHODCALLTYPE IRAPISession_CeFindFirstFile_Proxy(
+ IRAPISession * This,
+ LPCWSTR FileName,
+ LPCE_FIND_DATA FindData);
+
+
+void __RPC_STUB IRAPISession_CeFindFirstFile_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeFindNextFile_Proxy(
+ IRAPISession * This,
+ HANDLE FoundFile,
+ LPCE_FIND_DATA FindData);
+
+
+void __RPC_STUB IRAPISession_CeFindNextFile_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeFindClose_Proxy(
+ IRAPISession * This,
+ HANDLE FoundFile);
+
+
+void __RPC_STUB IRAPISession_CeFindClose_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+DWORD STDMETHODCALLTYPE IRAPISession_CeGetFileAttributes_Proxy(
+ IRAPISession * This,
+ LPCWSTR FileName);
+
+
+void __RPC_STUB IRAPISession_CeGetFileAttributes_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeSetFileAttributes_Proxy(
+ IRAPISession * This,
+ LPCWSTR FileName,
+ DWORD FileAttrib);
+
+
+void __RPC_STUB IRAPISession_CeSetFileAttributes_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HANDLE STDMETHODCALLTYPE IRAPISession_CeCreateFile_Proxy(
+ IRAPISession * This,
+ LPCWSTR lpFileName,
+ DWORD dwDesiredAccess,
+ DWORD dwShareMode,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+ DWORD dwCreationDistribution,
+ DWORD dwFlagsAndAttributes,
+ HANDLE hTemplateFile);
+
+
+void __RPC_STUB IRAPISession_CeCreateFile_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeReadFile_Proxy(
+ IRAPISession * This,
+ HANDLE hFile,
+ LPVOID lpBuffer,
+ DWORD nNumberOfBytesToRead,
+ LPDWORD lpNumberOfBytesRead,
+ LPOVERLAPPED lpOverlapped);
+
+
+void __RPC_STUB IRAPISession_CeReadFile_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeWriteFile_Proxy(
+ IRAPISession * This,
+ HANDLE hFile,
+ LPCVOID lpBuffer,
+ DWORD nNumberOfBytesToWrite,
+ LPDWORD lpNumberOfBytesWritten,
+ LPOVERLAPPED lpOverlapped);
+
+
+void __RPC_STUB IRAPISession_CeWriteFile_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeCloseHandle_Proxy(
+ IRAPISession * This,
+ HANDLE hObject);
+
+
+void __RPC_STUB IRAPISession_CeCloseHandle_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeFindAllFiles_Proxy(
+ IRAPISession * This,
+ LPCWSTR Path,
+ DWORD Flags,
+ LPDWORD pFoundCount,
+ LPLPCE_FIND_DATA ppFindDataArray);
+
+
+void __RPC_STUB IRAPISession_CeFindAllFiles_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HANDLE STDMETHODCALLTYPE IRAPISession_CeFindFirstDatabase_Proxy(
+ IRAPISession * This,
+ DWORD dwDbaseType);
+
+
+void __RPC_STUB IRAPISession_CeFindFirstDatabase_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+CEOID STDMETHODCALLTYPE IRAPISession_CeFindNextDatabase_Proxy(
+ IRAPISession * This,
+ HANDLE hEnum);
+
+
+void __RPC_STUB IRAPISession_CeFindNextDatabase_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeOidGetInfo_Proxy(
+ IRAPISession * This,
+ CEOID oid,
+ CEOIDINFO *oidInfo);
+
+
+void __RPC_STUB IRAPISession_CeOidGetInfo_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+CEOID STDMETHODCALLTYPE IRAPISession_CeCreateDatabase_Proxy(
+ IRAPISession * This,
+ LPWSTR lpszName,
+ DWORD dwDbaseType,
+ WORD cNumSortOrder,
+ SORTORDERSPEC *rgSortSpecs);
+
+
+void __RPC_STUB IRAPISession_CeCreateDatabase_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HANDLE STDMETHODCALLTYPE IRAPISession_CeOpenDatabase_Proxy(
+ IRAPISession * This,
+ PCEOID poid,
+ LPWSTR lpszName,
+ CEPROPID propid,
+ DWORD dwFlags,
+ HWND hwndNotify);
+
+
+void __RPC_STUB IRAPISession_CeOpenDatabase_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeDeleteDatabase_Proxy(
+ IRAPISession * This,
+ CEOID oidDbase);
+
+
+void __RPC_STUB IRAPISession_CeDeleteDatabase_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+CEOID STDMETHODCALLTYPE IRAPISession_CeReadRecordProps_Proxy(
+ IRAPISession * This,
+ HANDLE hDbase,
+ DWORD dwFlags,
+ LPWORD lpcPropID,
+ CEPROPID *rgPropID,
+ LPBYTE *lplpBuffer,
+ LPDWORD lpcbBuffer);
+
+
+void __RPC_STUB IRAPISession_CeReadRecordProps_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+CEOID STDMETHODCALLTYPE IRAPISession_CeWriteRecordProps_Proxy(
+ IRAPISession * This,
+ HANDLE hDbase,
+ CEOID oidRecord,
+ WORD cPropID,
+ CEPROPVAL *rgPropVal);
+
+
+void __RPC_STUB IRAPISession_CeWriteRecordProps_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeDeleteRecord_Proxy(
+ IRAPISession * This,
+ HANDLE hDatabase,
+ CEOID oidRecord);
+
+
+void __RPC_STUB IRAPISession_CeDeleteRecord_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+CEOID STDMETHODCALLTYPE IRAPISession_CeSeekDatabase_Proxy(
+ IRAPISession * This,
+ HANDLE hDatabase,
+ DWORD dwSeekType,
+ DWORD dwValue,
+ LPDWORD lpdwIndex);
+
+
+void __RPC_STUB IRAPISession_CeSeekDatabase_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeSetDatabaseInfo_Proxy(
+ IRAPISession * This,
+ CEOID oidDbase,
+ CEDBASEINFO *pNewInfo);
+
+
+void __RPC_STUB IRAPISession_CeSetDatabaseInfo_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+DWORD STDMETHODCALLTYPE IRAPISession_CeSetFilePointer_Proxy(
+ IRAPISession * This,
+ HANDLE hFile,
+ LONG lDistanceToMove,
+ PLONG lpDistanceToMoveHigh,
+ DWORD dwMoveMethod);
+
+
+void __RPC_STUB IRAPISession_CeSetFilePointer_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeSetEndOfFile_Proxy(
+ IRAPISession * This,
+ HANDLE hFile);
+
+
+void __RPC_STUB IRAPISession_CeSetEndOfFile_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeCreateDirectory_Proxy(
+ IRAPISession * This,
+ LPCWSTR lpPathName,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes);
+
+
+void __RPC_STUB IRAPISession_CeCreateDirectory_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeRemoveDirectory_Proxy(
+ IRAPISession * This,
+ LPCWSTR lpPathName);
+
+
+void __RPC_STUB IRAPISession_CeRemoveDirectory_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeCreateProcess_Proxy(
+ IRAPISession * This,
+ LPCWSTR lpszImageName,
+ LPCWSTR lpszCmdLine,
+ LPSECURITY_ATTRIBUTES lpsaProcess,
+ LPSECURITY_ATTRIBUTES lpsaThread,
+ BOOL fInheritHandles,
+ DWORD fdwCreate,
+ LPVOID lpvEnvironment,
+ LPWSTR lpszCurDir,
+ LPSTARTUPINFOW lpsiStartInfo,
+ LPPROCESS_INFORMATION lppiProcInfo);
+
+
+void __RPC_STUB IRAPISession_CeCreateProcess_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeMoveFile_Proxy(
+ IRAPISession * This,
+ LPCWSTR lpExistingFileName,
+ LPCWSTR lpNewFileName);
+
+
+void __RPC_STUB IRAPISession_CeMoveFile_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeCopyFile_Proxy(
+ IRAPISession * This,
+ LPCWSTR lpExistingFileName,
+ LPCWSTR lpNewFileName,
+ BOOL bFailIfExists);
+
+
+void __RPC_STUB IRAPISession_CeCopyFile_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeDeleteFile_Proxy(
+ IRAPISession * This,
+ LPCWSTR FileName);
+
+
+void __RPC_STUB IRAPISession_CeDeleteFile_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+DWORD STDMETHODCALLTYPE IRAPISession_CeGetFileSize_Proxy(
+ IRAPISession * This,
+ HANDLE hFile,
+ LPDWORD lpFileSizeHigh);
+
+
+void __RPC_STUB IRAPISession_CeGetFileSize_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+LONG STDMETHODCALLTYPE IRAPISession_CeRegOpenKeyEx_Proxy(
+ IRAPISession * This,
+ HKEY hKey,
+ LPCWSTR lpszSubKey,
+ DWORD dwReserved,
+ REGSAM samDesired,
+ PHKEY phkResult);
+
+
+void __RPC_STUB IRAPISession_CeRegOpenKeyEx_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+LONG STDMETHODCALLTYPE IRAPISession_CeRegEnumKeyEx_Proxy(
+ IRAPISession * This,
+ HKEY hKey,
+ DWORD dwIndex,
+ LPWSTR lpName,
+ LPDWORD lpcbName,
+ LPDWORD lpReserved,
+ LPWSTR lpClass,
+ LPDWORD lpcbClass,
+ PFILETIME lpftLastWriteTime);
+
+
+void __RPC_STUB IRAPISession_CeRegEnumKeyEx_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+LONG STDMETHODCALLTYPE IRAPISession_CeRegCreateKeyEx_Proxy(
+ IRAPISession * This,
+ HKEY hKey,
+ LPCWSTR lpszSubKey,
+ DWORD dwReserved,
+ LPWSTR lpszClass,
+ DWORD fdwOptions,
+ REGSAM samDesired,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+ PHKEY phkResult,
+ LPDWORD lpdwDisposition);
+
+
+void __RPC_STUB IRAPISession_CeRegCreateKeyEx_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+LONG STDMETHODCALLTYPE IRAPISession_CeRegCloseKey_Proxy(
+ IRAPISession * This,
+ HKEY hKey);
+
+
+void __RPC_STUB IRAPISession_CeRegCloseKey_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+LONG STDMETHODCALLTYPE IRAPISession_CeRegDeleteKey_Proxy(
+ IRAPISession * This,
+ HKEY hKey,
+ LPCWSTR lpszSubKey);
+
+
+void __RPC_STUB IRAPISession_CeRegDeleteKey_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+LONG STDMETHODCALLTYPE IRAPISession_CeRegEnumValue_Proxy(
+ IRAPISession * This,
+ HKEY hKey,
+ DWORD dwIndex,
+ LPWSTR lpszValueName,
+ LPDWORD lpcbValueName,
+ LPDWORD lpReserved,
+ LPDWORD lpType,
+ LPBYTE lpData,
+ LPDWORD lpcbData);
+
+
+void __RPC_STUB IRAPISession_CeRegEnumValue_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+LONG STDMETHODCALLTYPE IRAPISession_CeRegDeleteValue_Proxy(
+ IRAPISession * This,
+ HKEY hKey,
+ LPCWSTR lpszValueName);
+
+
+void __RPC_STUB IRAPISession_CeRegDeleteValue_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+LONG STDMETHODCALLTYPE IRAPISession_CeRegQueryInfoKey_Proxy(
+ IRAPISession * This,
+ HKEY hKey,
+ LPWSTR lpClass,
+ LPDWORD lpcbClass,
+ LPDWORD lpReserved,
+ LPDWORD lpcSubKeys,
+ LPDWORD lpcbMaxSubKeyLen,
+ LPDWORD lpcbMaxClassLen,
+ LPDWORD lpcValues,
+ LPDWORD lpcbMaxValueNameLen,
+ LPDWORD lpcbMaxValueLen,
+ LPDWORD lpcbSecurityDescriptor,
+ PFILETIME lpftLastWriteTime);
+
+
+void __RPC_STUB IRAPISession_CeRegQueryInfoKey_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+LONG STDMETHODCALLTYPE IRAPISession_CeRegQueryValueEx_Proxy(
+ IRAPISession * This,
+ HKEY hKey,
+ LPCWSTR lpValueName,
+ LPDWORD lpReserved,
+ LPDWORD lpType,
+ LPBYTE lpData,
+ LPDWORD lpcbData);
+
+
+void __RPC_STUB IRAPISession_CeRegQueryValueEx_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+LONG STDMETHODCALLTYPE IRAPISession_CeRegSetValueEx_Proxy(
+ IRAPISession * This,
+ HKEY hKey,
+ LPCWSTR lpValueName,
+ DWORD Reserved,
+ DWORD dwType,
+ BYTE *lpData,
+ DWORD cbData);
+
+
+void __RPC_STUB IRAPISession_CeRegSetValueEx_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeGetStoreInformation_Proxy(
+ IRAPISession * This,
+ LPSTORE_INFORMATION lpsi);
+
+
+void __RPC_STUB IRAPISession_CeGetStoreInformation_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+INT STDMETHODCALLTYPE IRAPISession_CeGetSystemMetrics_Proxy(
+ IRAPISession * This,
+ INT nIndex);
+
+
+void __RPC_STUB IRAPISession_CeGetSystemMetrics_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+INT STDMETHODCALLTYPE IRAPISession_CeGetDesktopDeviceCaps_Proxy(
+ IRAPISession * This,
+ INT nIndex);
+
+
+void __RPC_STUB IRAPISession_CeGetDesktopDeviceCaps_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeFindAllDatabases_Proxy(
+ IRAPISession * This,
+ DWORD DbaseType,
+ WORD Flags,
+ LPWORD cFindData,
+ LPLPCEDB_FIND_DATA ppFindData);
+
+
+void __RPC_STUB IRAPISession_CeFindAllDatabases_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+void STDMETHODCALLTYPE IRAPISession_CeGetSystemInfo_Proxy(
+ IRAPISession * This,
+ LPSYSTEM_INFO lpSystemInfo);
+
+
+void __RPC_STUB IRAPISession_CeGetSystemInfo_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeSHCreateShortcut_Proxy(
+ IRAPISession * This,
+ LPWSTR lpszShortcut,
+ LPWSTR lpszTarget);
+
+
+void __RPC_STUB IRAPISession_CeSHCreateShortcut_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeSHGetShortcutTarget_Proxy(
+ IRAPISession * This,
+ LPWSTR lpszShortcut,
+ LPWSTR lpszTarget,
+ int cbMax);
+
+
+void __RPC_STUB IRAPISession_CeSHGetShortcutTarget_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeCheckPassword_Proxy(
+ IRAPISession * This,
+ LPWSTR lpszPassword);
+
+
+void __RPC_STUB IRAPISession_CeCheckPassword_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeGetFileTime_Proxy(
+ IRAPISession * This,
+ HANDLE hFile,
+ LPFILETIME lpCreationTime,
+ LPFILETIME lpLastAccessTime,
+ LPFILETIME lpLastWriteTime);
+
+
+void __RPC_STUB IRAPISession_CeGetFileTime_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeSetFileTime_Proxy(
+ IRAPISession * This,
+ HANDLE hFile,
+ FILETIME *lpCreationTime,
+ FILETIME *lpLastAccessTime,
+ FILETIME *lpLastWriteTime);
+
+
+void __RPC_STUB IRAPISession_CeSetFileTime_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeGetVersionEx_Proxy(
+ IRAPISession * This,
+ LPCEOSVERSIONINFO lpVersionInformation);
+
+
+void __RPC_STUB IRAPISession_CeGetVersionEx_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HWND STDMETHODCALLTYPE IRAPISession_CeGetWindow_Proxy(
+ IRAPISession * This,
+ HWND hWnd,
+ UINT uCmd);
+
+
+void __RPC_STUB IRAPISession_CeGetWindow_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+LONG STDMETHODCALLTYPE IRAPISession_CeGetWindowLong_Proxy(
+ IRAPISession * This,
+ HWND hWnd,
+ int nIndex);
+
+
+void __RPC_STUB IRAPISession_CeGetWindowLong_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+INT STDMETHODCALLTYPE IRAPISession_CeGetWindowText_Proxy(
+ IRAPISession * This,
+ HWND hWnd,
+ LPWSTR lpString,
+ int nMaxCount);
+
+
+void __RPC_STUB IRAPISession_CeGetWindowText_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+INT STDMETHODCALLTYPE IRAPISession_CeGetClassName_Proxy(
+ IRAPISession * This,
+ HWND hWnd,
+ LPWSTR lpClassName,
+ int nMaxCount);
+
+
+void __RPC_STUB IRAPISession_CeGetClassName_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+void STDMETHODCALLTYPE IRAPISession_CeGlobalMemoryStatus_Proxy(
+ IRAPISession * This,
+ LPMEMORYSTATUS lpmst);
+
+
+void __RPC_STUB IRAPISession_CeGlobalMemoryStatus_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeGetSystemPowerStatusEx_Proxy(
+ IRAPISession * This,
+ PSYSTEM_POWER_STATUS_EX pstatus,
+ BOOL fUpdate);
+
+
+void __RPC_STUB IRAPISession_CeGetSystemPowerStatusEx_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+DWORD STDMETHODCALLTYPE IRAPISession_CeGetTempPath_Proxy(
+ IRAPISession * This,
+ DWORD nBufferLength,
+ LPWSTR lpBuffer);
+
+
+void __RPC_STUB IRAPISession_CeGetTempPath_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+DWORD STDMETHODCALLTYPE IRAPISession_CeGetSpecialFolderPath_Proxy(
+ IRAPISession * This,
+ int nFolder,
+ DWORD nBufferLength,
+ LPWSTR lpBuffer);
+
+
+void __RPC_STUB IRAPISession_CeGetSpecialFolderPath_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IRAPISession_CeRapiInvoke_Proxy(
+ IRAPISession * This,
+ LPCWSTR pDllPath,
+ LPCWSTR pFunctionName,
+ DWORD cbInput,
+ BYTE *pInput,
+ DWORD *pcbOutput,
+ BYTE **ppOutput,
+ IRAPIStream **ppIRAPIStream,
+ DWORD dwReserved);
+
+
+void __RPC_STUB IRAPISession_CeRapiInvoke_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HANDLE STDMETHODCALLTYPE IRAPISession_CeFindFirstDatabaseEx_Proxy(
+ IRAPISession * This,
+ PCEGUID pguid,
+ DWORD dwDbaseType);
+
+
+void __RPC_STUB IRAPISession_CeFindFirstDatabaseEx_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+CEOID STDMETHODCALLTYPE IRAPISession_CeFindNextDatabaseEx_Proxy(
+ IRAPISession * This,
+ HANDLE hEnum,
+ PCEGUID pguid);
+
+
+void __RPC_STUB IRAPISession_CeFindNextDatabaseEx_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+CEOID STDMETHODCALLTYPE IRAPISession_CeCreateDatabaseEx_Proxy(
+ IRAPISession * This,
+ PCEGUID pceguid,
+ CEDBASEINFO *lpCEDBInfo);
+
+
+void __RPC_STUB IRAPISession_CeCreateDatabaseEx_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeSetDatabaseInfoEx_Proxy(
+ IRAPISession * This,
+ PCEGUID pceguid,
+ CEOID oidDbase,
+ CEDBASEINFO *pNewInfo);
+
+
+void __RPC_STUB IRAPISession_CeSetDatabaseInfoEx_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HANDLE STDMETHODCALLTYPE IRAPISession_CeOpenDatabaseEx_Proxy(
+ IRAPISession * This,
+ PCEGUID pceguid,
+ PCEOID poid,
+ LPWSTR lpszName,
+ CEPROPID propid,
+ DWORD dwFlags,
+ CENOTIFYREQUEST *pReq);
+
+
+void __RPC_STUB IRAPISession_CeOpenDatabaseEx_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeDeleteDatabaseEx_Proxy(
+ IRAPISession * This,
+ PCEGUID pceguid,
+ CEOID oidDbase);
+
+
+void __RPC_STUB IRAPISession_CeDeleteDatabaseEx_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+CEOID STDMETHODCALLTYPE IRAPISession_CeReadRecordPropsEx_Proxy(
+ IRAPISession * This,
+ HANDLE hDbase,
+ DWORD dwFlags,
+ LPWORD lpcPropID,
+ CEPROPID *rgPropID,
+ LPBYTE *lplpBuffer,
+ LPDWORD lpcbBuffer,
+ HANDLE hHeap);
+
+
+void __RPC_STUB IRAPISession_CeReadRecordPropsEx_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeMountDBVol_Proxy(
+ IRAPISession * This,
+ PCEGUID pceguid,
+ LPWSTR lpszDBVol,
+ DWORD dwFlags);
+
+
+void __RPC_STUB IRAPISession_CeMountDBVol_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeUnmountDBVol_Proxy(
+ IRAPISession * This,
+ PCEGUID pceguid);
+
+
+void __RPC_STUB IRAPISession_CeUnmountDBVol_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeFlushDBVol_Proxy(
+ IRAPISession * This,
+ PCEGUID pceguid);
+
+
+void __RPC_STUB IRAPISession_CeFlushDBVol_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeEnumDBVolumes_Proxy(
+ IRAPISession * This,
+ PCEGUID pceguid,
+ LPWSTR lpBuf,
+ DWORD dwNumChars);
+
+
+void __RPC_STUB IRAPISession_CeEnumDBVolumes_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeOidGetInfoEx_Proxy(
+ IRAPISession * This,
+ PCEGUID pceguid,
+ CEOID oid,
+ CEOIDINFO *oidInfo);
+
+
+void __RPC_STUB IRAPISession_CeOidGetInfoEx_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IRAPISession_CeSyncStart_Proxy(
+ IRAPISession * This,
+ LPCWSTR szCommand);
+
+
+void __RPC_STUB IRAPISession_CeSyncStart_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IRAPISession_CeSyncStop_Proxy(
+ IRAPISession * This);
+
+
+void __RPC_STUB IRAPISession_CeSyncStop_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeQueryInstructionSet_Proxy(
+ IRAPISession * This,
+ DWORD dwInstructionSet,
+ LPDWORD lpdwCurrentInstructionSet);
+
+
+void __RPC_STUB IRAPISession_CeQueryInstructionSet_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+BOOL STDMETHODCALLTYPE IRAPISession_CeGetDiskFreeSpaceEx_Proxy(
+ IRAPISession * This,
+ LPCWSTR lpDirectoryName,
+ ULARGE_INTEGER *lpFreeBytesAvailableToCaller,
+ ULARGE_INTEGER *lpTotalNumberOfBytes,
+ ULARGE_INTEGER *lpTotalNumberOfFreeBytes);
+
+
+void __RPC_STUB IRAPISession_CeGetDiskFreeSpaceEx_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IRAPISession_INTERFACE_DEFINED__ */
+
+
+#ifndef __IRAPIDevice_INTERFACE_DEFINED__
+#define __IRAPIDevice_INTERFACE_DEFINED__
+
+/* interface IRAPIDevice */
+/* [unique][uuid][object] */
+
+
+EXTERN_C const IID IID_IRAPIDevice;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("8a0f1632-3905-4ca4-aea4-7e094ecbb9a7")
+ IRAPIDevice : public IUnknown
+ {
+ public:
+ virtual HRESULT STDMETHODCALLTYPE GetConnectStat(
+ /* [out] */ RAPI_DEVICESTATUS *pStat) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDeviceInfo(
+ /* [out] */ RAPI_DEVICEINFO *pDevInfo) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetConnectionInfo(
+ /* [out] */ RAPI_CONNECTIONINFO *pConnInfo) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateSession(
+ /* [out] */ IRAPISession **ppISession) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IRAPIDeviceVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IRAPIDevice * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IRAPIDevice * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IRAPIDevice * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetConnectStat )(
+ IRAPIDevice * This,
+ /* [out] */ RAPI_DEVICESTATUS *pStat);
+
+ HRESULT ( STDMETHODCALLTYPE *GetDeviceInfo )(
+ IRAPIDevice * This,
+ /* [out] */ RAPI_DEVICEINFO *pDevInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetConnectionInfo )(
+ IRAPIDevice * This,
+ /* [out] */ RAPI_CONNECTIONINFO *pConnInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *CreateSession )(
+ IRAPIDevice * This,
+ /* [out] */ IRAPISession **ppISession);
+
+ END_INTERFACE
+ } IRAPIDeviceVtbl;
+
+ interface IRAPIDevice
+ {
+ CONST_VTBL struct IRAPIDeviceVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IRAPIDevice_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IRAPIDevice_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IRAPIDevice_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IRAPIDevice_GetConnectStat(This,pStat) \
+ (This)->lpVtbl -> GetConnectStat(This,pStat)
+
+#define IRAPIDevice_GetDeviceInfo(This,pDevInfo) \
+ (This)->lpVtbl -> GetDeviceInfo(This,pDevInfo)
+
+#define IRAPIDevice_GetConnectionInfo(This,pConnInfo) \
+ (This)->lpVtbl -> GetConnectionInfo(This,pConnInfo)
+
+#define IRAPIDevice_CreateSession(This,ppISession) \
+ (This)->lpVtbl -> CreateSession(This,ppISession)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+HRESULT STDMETHODCALLTYPE IRAPIDevice_GetConnectStat_Proxy(
+ IRAPIDevice * This,
+ /* [out] */ RAPI_DEVICESTATUS *pStat);
+
+
+void __RPC_STUB IRAPIDevice_GetConnectStat_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IRAPIDevice_GetDeviceInfo_Proxy(
+ IRAPIDevice * This,
+ /* [out] */ RAPI_DEVICEINFO *pDevInfo);
+
+
+void __RPC_STUB IRAPIDevice_GetDeviceInfo_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IRAPIDevice_GetConnectionInfo_Proxy(
+ IRAPIDevice * This,
+ /* [out] */ RAPI_CONNECTIONINFO *pConnInfo);
+
+
+void __RPC_STUB IRAPIDevice_GetConnectionInfo_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IRAPIDevice_CreateSession_Proxy(
+ IRAPIDevice * This,
+ /* [out] */ IRAPISession **ppISession);
+
+
+void __RPC_STUB IRAPIDevice_CreateSession_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IRAPIDevice_INTERFACE_DEFINED__ */
+
+
+#ifndef __IRAPIEnumDevices_INTERFACE_DEFINED__
+#define __IRAPIEnumDevices_INTERFACE_DEFINED__
+
+/* interface IRAPIEnumDevices */
+/* [unique][uuid][object] */
+
+
+EXTERN_C const IID IID_IRAPIEnumDevices;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("357a557c-b03f-4240-90d8-c6c71c659bf1")
+ IRAPIEnumDevices : public IUnknown
+ {
+ public:
+ virtual HRESULT STDMETHODCALLTYPE Next(
+ /* [out] */ IRAPIDevice **ppIDevice) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Skip(
+ /* [in] */ ULONG cElt) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Clone(
+ /* [out] */ IRAPIEnumDevices **ppIEnum) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetCount(
+ /* [out] */ ULONG *pcElt) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IRAPIEnumDevicesVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IRAPIEnumDevices * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IRAPIEnumDevices * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IRAPIEnumDevices * This);
+
+ HRESULT ( STDMETHODCALLTYPE *Next )(
+ IRAPIEnumDevices * This,
+ /* [out] */ IRAPIDevice **ppIDevice);
+
+ HRESULT ( STDMETHODCALLTYPE *Reset )(
+ IRAPIEnumDevices * This);
+
+ HRESULT ( STDMETHODCALLTYPE *Skip )(
+ IRAPIEnumDevices * This,
+ /* [in] */ ULONG cElt);
+
+ HRESULT ( STDMETHODCALLTYPE *Clone )(
+ IRAPIEnumDevices * This,
+ /* [out] */ IRAPIEnumDevices **ppIEnum);
+
+ HRESULT ( STDMETHODCALLTYPE *GetCount )(
+ IRAPIEnumDevices * This,
+ /* [out] */ ULONG *pcElt);
+
+ END_INTERFACE
+ } IRAPIEnumDevicesVtbl;
+
+ interface IRAPIEnumDevices
+ {
+ CONST_VTBL struct IRAPIEnumDevicesVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IRAPIEnumDevices_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IRAPIEnumDevices_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IRAPIEnumDevices_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IRAPIEnumDevices_Next(This,ppIDevice) \
+ (This)->lpVtbl -> Next(This,ppIDevice)
+
+#define IRAPIEnumDevices_Reset(This) \
+ (This)->lpVtbl -> Reset(This)
+
+#define IRAPIEnumDevices_Skip(This,cElt) \
+ (This)->lpVtbl -> Skip(This,cElt)
+
+#define IRAPIEnumDevices_Clone(This,ppIEnum) \
+ (This)->lpVtbl -> Clone(This,ppIEnum)
+
+#define IRAPIEnumDevices_GetCount(This,pcElt) \
+ (This)->lpVtbl -> GetCount(This,pcElt)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+HRESULT STDMETHODCALLTYPE IRAPIEnumDevices_Next_Proxy(
+ IRAPIEnumDevices * This,
+ /* [out] */ IRAPIDevice **ppIDevice);
+
+
+void __RPC_STUB IRAPIEnumDevices_Next_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IRAPIEnumDevices_Reset_Proxy(
+ IRAPIEnumDevices * This);
+
+
+void __RPC_STUB IRAPIEnumDevices_Reset_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IRAPIEnumDevices_Skip_Proxy(
+ IRAPIEnumDevices * This,
+ /* [in] */ ULONG cElt);
+
+
+void __RPC_STUB IRAPIEnumDevices_Skip_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IRAPIEnumDevices_Clone_Proxy(
+ IRAPIEnumDevices * This,
+ /* [out] */ IRAPIEnumDevices **ppIEnum);
+
+
+void __RPC_STUB IRAPIEnumDevices_Clone_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IRAPIEnumDevices_GetCount_Proxy(
+ IRAPIEnumDevices * This,
+ /* [out] */ ULONG *pcElt);
+
+
+void __RPC_STUB IRAPIEnumDevices_GetCount_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IRAPIEnumDevices_INTERFACE_DEFINED__ */
+
+
+#ifndef __IRAPISink_INTERFACE_DEFINED__
+#define __IRAPISink_INTERFACE_DEFINED__
+
+/* interface IRAPISink */
+/* [unique][uuid][object] */
+
+
+EXTERN_C const IID IID_IRAPISink;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("b4fd053e-4810-46db-889b-20e638e334f0")
+ IRAPISink : public IUnknown
+ {
+ public:
+ virtual HRESULT STDMETHODCALLTYPE OnDeviceConnected(
+ /* [in] */ IRAPIDevice *pIDevice) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE OnDeviceDisconnected(
+ /* [in] */ IRAPIDevice *pIDevice) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IRAPISinkVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IRAPISink * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IRAPISink * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IRAPISink * This);
+
+ HRESULT ( STDMETHODCALLTYPE *OnDeviceConnected )(
+ IRAPISink * This,
+ /* [in] */ IRAPIDevice *pIDevice);
+
+ HRESULT ( STDMETHODCALLTYPE *OnDeviceDisconnected )(
+ IRAPISink * This,
+ /* [in] */ IRAPIDevice *pIDevice);
+
+ END_INTERFACE
+ } IRAPISinkVtbl;
+
+ interface IRAPISink
+ {
+ CONST_VTBL struct IRAPISinkVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IRAPISink_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IRAPISink_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IRAPISink_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IRAPISink_OnDeviceConnected(This,pIDevice) \
+ (This)->lpVtbl -> OnDeviceConnected(This,pIDevice)
+
+#define IRAPISink_OnDeviceDisconnected(This,pIDevice) \
+ (This)->lpVtbl -> OnDeviceDisconnected(This,pIDevice)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+HRESULT STDMETHODCALLTYPE IRAPISink_OnDeviceConnected_Proxy(
+ IRAPISink * This,
+ /* [in] */ IRAPIDevice *pIDevice);
+
+
+void __RPC_STUB IRAPISink_OnDeviceConnected_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IRAPISink_OnDeviceDisconnected_Proxy(
+ IRAPISink * This,
+ /* [in] */ IRAPIDevice *pIDevice);
+
+
+void __RPC_STUB IRAPISink_OnDeviceDisconnected_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IRAPISink_INTERFACE_DEFINED__ */
+
+
+#ifndef __IRAPIDesktop_INTERFACE_DEFINED__
+#define __IRAPIDesktop_INTERFACE_DEFINED__
+
+/* interface IRAPIDesktop */
+/* [unique][uuid][object] */
+
+
+EXTERN_C const IID IID_IRAPIDesktop;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("dcbeb807-14d0-4cbd-926c-b991f4fd1b91")
+ IRAPIDesktop : public IUnknown
+ {
+ public:
+ virtual HRESULT STDMETHODCALLTYPE FindDevice(
+ /* [in] */ RAPIDEVICEID *pDeviceID,
+ /* [in] */ RAPI_GETDEVICEOPCODE opFlags,
+ /* [out] */ IRAPIDevice **ppIDevice) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EnumDevices(
+ /* [out] */ IRAPIEnumDevices **ppIEnum) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Advise(
+ /* [in] */ IRAPISink *pISink,
+ /* [out] */ DWORD_PTR *pdwContext) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UnAdvise(
+ /* [in] */ DWORD_PTR dwContext) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IRAPIDesktopVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IRAPIDesktop * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IRAPIDesktop * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IRAPIDesktop * This);
+
+ HRESULT ( STDMETHODCALLTYPE *FindDevice )(
+ IRAPIDesktop * This,
+ /* [in] */ RAPIDEVICEID *pDeviceID,
+ /* [in] */ RAPI_GETDEVICEOPCODE opFlags,
+ /* [out] */ IRAPIDevice **ppIDevice);
+
+ HRESULT ( STDMETHODCALLTYPE *EnumDevices )(
+ IRAPIDesktop * This,
+ /* [out] */ IRAPIEnumDevices **ppIEnum);
+
+ HRESULT ( STDMETHODCALLTYPE *Advise )(
+ IRAPIDesktop * This,
+ /* [in] */ IRAPISink *pISink,
+ /* [out] */ DWORD_PTR *pdwContext);
+
+ HRESULT ( STDMETHODCALLTYPE *UnAdvise )(
+ IRAPIDesktop * This,
+ /* [in] */ DWORD_PTR dwContext);
+
+ END_INTERFACE
+ } IRAPIDesktopVtbl;
+
+ interface IRAPIDesktop
+ {
+ CONST_VTBL struct IRAPIDesktopVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IRAPIDesktop_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IRAPIDesktop_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IRAPIDesktop_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IRAPIDesktop_FindDevice(This,pDeviceID,opFlags,ppIDevice) \
+ (This)->lpVtbl -> FindDevice(This,pDeviceID,opFlags,ppIDevice)
+
+#define IRAPIDesktop_EnumDevices(This,ppIEnum) \
+ (This)->lpVtbl -> EnumDevices(This,ppIEnum)
+
+#define IRAPIDesktop_Advise(This,pISink,pdwContext) \
+ (This)->lpVtbl -> Advise(This,pISink,pdwContext)
+
+#define IRAPIDesktop_UnAdvise(This,dwContext) \
+ (This)->lpVtbl -> UnAdvise(This,dwContext)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+HRESULT STDMETHODCALLTYPE IRAPIDesktop_FindDevice_Proxy(
+ IRAPIDesktop * This,
+ /* [in] */ RAPIDEVICEID *pDeviceID,
+ /* [in] */ RAPI_GETDEVICEOPCODE opFlags,
+ /* [out] */ IRAPIDevice **ppIDevice);
+
+
+void __RPC_STUB IRAPIDesktop_FindDevice_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IRAPIDesktop_EnumDevices_Proxy(
+ IRAPIDesktop * This,
+ /* [out] */ IRAPIEnumDevices **ppIEnum);
+
+
+void __RPC_STUB IRAPIDesktop_EnumDevices_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IRAPIDesktop_Advise_Proxy(
+ IRAPIDesktop * This,
+ /* [in] */ IRAPISink *pISink,
+ /* [out] */ DWORD_PTR *pdwContext);
+
+
+void __RPC_STUB IRAPIDesktop_Advise_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IRAPIDesktop_UnAdvise_Proxy(
+ IRAPIDesktop * This,
+ /* [in] */ DWORD_PTR dwContext);
+
+
+void __RPC_STUB IRAPIDesktop_UnAdvise_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IRAPIDesktop_INTERFACE_DEFINED__ */
+
+
+
+#ifndef __RAPILib_LIBRARY_DEFINED__
+#define __RAPILib_LIBRARY_DEFINED__
+
+/* library RAPILib */
+/* [helpstring][version][uuid] */
+
+
+EXTERN_C const IID LIBID_RAPILib;
+
+EXTERN_C const CLSID CLSID_RAPI;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("35440327-1517-4B72-865E-3FFE8E97002F")
+RAPI;
+#endif
+#endif /* __RAPILib_LIBRARY_DEFINED__ */
+
+/* interface __MIDL_itf_RAPI2_0268 */
+/* [local] */
+
+#endif
+
+
+extern RPC_IF_HANDLE __MIDL_itf_RAPI2_0268_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_RAPI2_0268_v0_0_s_ifspec;
+
+/* Additional Prototypes for ALL interfaces */
+
+unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * );
+unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * );
+unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
+void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * );
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
diff --git a/Src/Plugins/Portable/pmp_activesync/activesync/Inc/rapitypes.h b/Src/Plugins/Portable/pmp_activesync/activesync/Inc/rapitypes.h
new file mode 100644
index 00000000..6a2f0b45
--- /dev/null
+++ b/Src/Plugins/Portable/pmp_activesync/activesync/Inc/rapitypes.h
@@ -0,0 +1,445 @@
+// *************************************************************************
+// rapitypes.h
+//
+// Copyright 2002 Microsoft Corporation, All Rights Reserved
+//
+// Typedefs common to public and private RAPI idl.
+//
+// ***************************************************************************
+
+#pragma once
+
+#ifdef MIDL_ONLY
+
+typedef BYTE far * LPBYTE;
+#define STDAPICALLTYPE __stdcall
+#endif // MIDL_ONLY
+
+//
+// The Windows CE WIN32_FIND_DATA structure differs from the
+// Windows WIN32_FIND_DATA stucture so we copy the Windows CE
+// definition to here so that both sides match.
+//
+#define MAX_PATH 260
+
+typedef struct CE_FIND_DATA
+{
+ DWORD dwFileAttributes;
+ FILETIME ftCreationTime;
+ FILETIME ftLastAccessTime;
+ FILETIME ftLastWriteTime;
+ DWORD nFileSizeHigh;
+ DWORD nFileSizeLow;
+ DWORD dwOID;
+ WCHAR cFileName[MAX_PATH];
+} CE_FIND_DATA;
+
+typedef CE_FIND_DATA* LPCE_FIND_DATA;
+
+typedef CE_FIND_DATA** LPLPCE_FIND_DATA;
+
+//
+// These are flags for CeFindAllFiles
+//
+#define FAF_ATTRIBUTES ((DWORD) 0x01)
+#define FAF_CREATION_TIME ((DWORD) 0x02)
+#define FAF_LASTACCESS_TIME ((DWORD) 0x04)
+#define FAF_LASTWRITE_TIME ((DWORD) 0x08)
+#define FAF_SIZE_HIGH ((DWORD) 0x10)
+#define FAF_SIZE_LOW ((DWORD) 0x20)
+#define FAF_OID ((DWORD) 0x40)
+#define FAF_NAME ((DWORD) 0x80)
+#define FAF_FLAG_COUNT ((UINT) 8)
+#define FAF_ATTRIB_CHILDREN ((DWORD) 0x01000)
+#define FAF_ATTRIB_NO_HIDDEN ((DWORD) 0x02000)
+#define FAF_FOLDERS_ONLY ((DWORD) 0x04000)
+#define FAF_NO_HIDDEN_SYS_ROMMODULES ((DWORD) 0x08000)
+#define FAF_GETTARGET ((DWORD) 0x10000)
+
+#define FAD_OID ((WORD) 0x01)
+#define FAD_FLAGS ((WORD) 0x02)
+#define FAD_NAME ((WORD) 0x04)
+#define FAD_TYPE ((WORD) 0x08)
+#define FAD_NUM_RECORDS ((WORD) 0x10)
+#define FAD_NUM_SORT_ORDER ((WORD) 0x20)
+#define FAD_SIZE ((WORD) 0x40)
+#define FAD_LAST_MODIFIED ((WORD) 0x80)
+#define FAD_SORT_SPECS ((WORD) 0x100)
+#define FAD_FLAG_COUNT ((UINT) 9)
+
+#ifndef FILE_ATTRIBUTE_INROM
+#define FILE_ATTRIBUTE_INROM 0x00000040
+#endif
+#ifndef FILE_ATTRIBUTE_ROMSTATICREF
+#define FILE_ATTRIBUTE_ROMSTATICREF 0x00001000
+#endif
+#ifndef FILE_ATTRIBUTE_ROMMODULE
+#define FILE_ATTRIBUTE_ROMMODULE 0x00002000
+#endif
+
+//
+// The following is not a standard Windows CE File Attribute.
+//
+#ifndef FILE_ATTRIBUTE_HAS_CHILDREN
+#define FILE_ATTRIBUTE_HAS_CHILDREN 0x00010000
+#endif
+#ifndef FILE_ATTRIBUTE_SHORTCUT
+#define FILE_ATTRIBUTE_SHORTCUT 0x00020000
+#endif
+
+typedef enum RAPISTREAMFLAG
+{
+ STREAM_TIMEOUT_READ
+} RAPISTREAMFLAG;
+
+// forward define
+#ifdef MIDL_ONLY
+interface IRAPIStream;
+#else
+typedef struct IRAPIStream IRAPIStream;
+#endif
+
+// RAPI extension on Windows CE (e.g., MyFunctionFOO) called via CeRapiInvoke should be declared as:
+// EXTERN_C RAPIEXT MyFunctionFOO;
+typedef HRESULT (STDAPICALLTYPE RAPIEXT)(
+ DWORD cbInput, // [IN]
+ BYTE * pInput, // [IN]
+ DWORD * pcbOutput, // [OUT]
+ BYTE ** ppOutput, // [OUT]
+ IRAPIStream * pIRAPIStream // [IN]
+ );
+
+//
+// The following definitions are for the client side only,
+// because they are already defined on Windows CE.
+//
+#ifndef UNDER_CE
+
+#include <stddef.h>
+
+typedef struct STORE_INFORMATION
+{
+ DWORD dwStoreSize;
+ DWORD dwFreeSize;
+} STORE_INFORMATION;
+
+
+typedef STORE_INFORMATION * LPSTORE_INFORMATION;
+
+typedef DWORD CEPROPID;
+
+typedef CEPROPID * PCEPROPID;
+
+#define TypeFromPropID(propid) LOWORD(propid)
+
+typedef DWORD CEOID;
+
+typedef CEOID *PCEOID;
+
+typedef struct CEGUID
+{
+ DWORD Data1;
+ DWORD Data2;
+ DWORD Data3;
+ DWORD Data4;
+} CEGUID;
+
+typedef CEGUID * PCEGUID;
+
+typedef struct CENOTIFICATION {
+ DWORD dwSize;
+ DWORD dwParam;
+ UINT uType;
+ CEGUID guid;
+ CEOID oid;
+ CEOID oidParent;
+} CENOTIFICATION;
+
+#define CEDB_EXNOTIFICATION 0x00000001
+
+typedef struct CENOTIFYREQUEST {
+ DWORD dwSize;
+ HWND hwnd;
+ DWORD dwFlags;
+ HANDLE hHeap;
+ DWORD dwParam;
+} CENOTIFYREQUEST;
+
+typedef CENOTIFYREQUEST * PCENOTIFYREQUEST;
+
+typedef struct CEFILEINFO
+{
+ DWORD dwAttributes;
+ CEOID oidParent;
+ WCHAR szFileName[MAX_PATH];
+ FILETIME ftLastChanged;
+ DWORD dwLength;
+} CEFILEINFO;
+
+typedef struct CEDIRINFO {
+ DWORD dwAttributes;
+ CEOID oidParent;
+ WCHAR szDirName[MAX_PATH];
+} CEDIRINFO;
+
+typedef struct CERECORDINFO {
+ CEOID oidParent;
+} CERECORDINFO;
+
+#define CEDB_SORT_DESCENDING 0x00000001
+#define CEDB_SORT_CASEINSENSITIVE 0x00000002
+#define CEDB_SORT_UNKNOWNFIRST 0x00000004
+#define CEDB_SORT_GENERICORDER 0x00000008
+
+typedef struct SORTORDERSPEC {
+ CEPROPID propid;
+ DWORD dwFlags;
+} SORTORDERSPEC;
+
+#define CEDB_MAXDBASENAMELEN 32
+#define CEDB_MAXDBASENAMELEN 32
+#define CEDB_MAXSORTORDER 4
+#define CEDB_MAXSORTORDER 4
+
+#define CEDB_VALIDNAME 0x0001
+#define CEDB_VALIDTYPE 0x0002
+#define CEDB_VALIDSORTSPEC 0x0004
+#define CEDB_VALIDMODTIME 0x0008
+#define CEDB_VALIDDBFLAGS 0x0010
+#define CEDB_VALIDCREATE (CEDB_VALIDNAME|CEDB_VALIDTYPE|CEDB_VALIDSORTSPEC|CEDB_VALIDDBFLAGS)
+
+#define CEDB_NOCOMPRESS 0x00010000
+
+typedef struct CEDBASEINFO
+{
+ DWORD dwFlags;
+ WCHAR szDbaseName[CEDB_MAXDBASENAMELEN];
+ DWORD dwDbaseType;
+ WORD wNumRecords;
+ WORD wNumSortOrder;
+ DWORD dwSize;
+ FILETIME ftLastModified;
+ SORTORDERSPEC rgSortSpecs[CEDB_MAXSORTORDER];
+} CEDBASEINFO;
+
+typedef struct CEDB_FIND_DATA {
+ CEOID OidDb;
+ CEDBASEINFO DbInfo;
+} CEDB_FIND_DATA;
+
+
+typedef CEDB_FIND_DATA * LPCEDB_FIND_DATA;
+
+typedef CEDB_FIND_DATA ** LPLPCEDB_FIND_DATA;
+
+#define OBJTYPE_INVALID 0
+#define OBJTYPE_FILE 1
+#define OBJTYPE_DIRECTORY 2
+#define OBJTYPE_DATABASE 3
+#define OBJTYPE_RECORD 4
+
+typedef struct CEOIDINFO
+{
+ WORD wObjType;
+ WORD wPad;
+ union
+ {
+ CEFILEINFO infFile;
+ CEDIRINFO infDirectory;
+ CEDBASEINFO infDatabase;
+ CERECORDINFO infRecord;
+ };
+} CEOIDINFO;
+
+#define CEDB_AUTOINCREMENT 0x00000001
+
+#define CEDB_SEEK_CEOID 0x00000001
+#define CEDB_SEEK_BEGINNING 0x00000002
+#define CEDB_SEEK_END 0x00000004
+#define CEDB_SEEK_CURRENT 0x00000008
+#define CEDB_SEEK_VALUESMALLER 0x00000010
+#define CEDB_SEEK_VALUEFIRSTEQUAL 0x00000020
+#define CEDB_SEEK_VALUEGREATER 0x00000040
+#define CEDB_SEEK_VALUENEXTEQUAL 0x00000080
+
+typedef struct CEBLOB{
+ DWORD dwCount;
+ LPBYTE lpb;
+} CEBLOB;
+
+#define CEVT_I2 2
+#define CEVT_UI2 18
+#define CEVT_I4 3
+#define CEVT_UI4 19
+#define CEVT_FILETIME 64
+#define CEVT_LPWSTR 31
+#define CEVT_BLOB 65
+#define CEVT_BOOL 11
+#define CEVT_R8 5
+
+typedef union CEVALUNION {
+ short iVal;
+ USHORT uiVal;
+ long lVal;
+ ULONG ulVal;
+ FILETIME filetime;
+ LPWSTR lpwstr;
+ CEBLOB blob;
+ BOOL boolVal;
+ double dblVal;
+} CEVALUNION;
+
+#define CEDB_PROPNOTFOUND 0x0100
+#define CEDB_PROPDELETE 0x0200
+
+typedef struct CEPROPVAL {
+ CEPROPID propid;
+ WORD wLenData;
+ WORD wFlags;
+ CEVALUNION val;
+} CEPROPVAL;
+
+typedef CEPROPVAL * PCEPROPVAL;
+
+
+#define CEDB_MAXDATABLOCKSIZE 4092
+#define CEDB_MAXPROPDATASIZE (CEDB_MAXDATABLOCKSIZE*16)
+#define CEDB_MAXRECORDSIZE (128*1024)
+
+#define CEDB_ALLOWREALLOC 0x00000001
+
+#define CREATE_SYSTEMGUID(pguid) (memset((pguid), 0, sizeof(CEGUID)))
+#define CREATE_INVALIDGUID(pguid) (memset((pguid), -1, sizeof(CEGUID)))
+
+#define CHECK_SYSTEMGUID(pguid) !((pguid)->Data1|(pguid)->Data2|(pguid)->Data3|(pguid)->Data4)
+#define CHECK_INVALIDGUID(pguid) !~((pguid)->Data1&(pguid)->Data2&(pguid)->Data3&(pguid)->Data4)
+
+#define SYSMEM_CHANGED 0
+#define SYSMEM_MUSTREBOOT 1
+#define SYSMEM_REBOOTPENDING 2
+#define SYSMEM_FAILED 3
+
+typedef struct CEOSVERSIONINFO {
+ DWORD dwOSVersionInfoSize;
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+ DWORD dwBuildNumber;
+ DWORD dwPlatformId;
+ WCHAR szCSDVersion[ 128 ];
+} CEOSVERSIONINFO;
+
+typedef CEOSVERSIONINFO * LPCEOSVERSIONINFO;
+
+#define AC_LINE_OFFLINE 0x00
+#define AC_LINE_ONLINE 0x01
+#define AC_LINE_BACKUP_POWER 0x02
+#define AC_LINE_UNKNOWN 0xFF
+
+#define BATTERY_FLAG_HIGH 0x01
+#define BATTERY_FLAG_LOW 0x02
+#define BATTERY_FLAG_CRITICAL 0x04
+#define BATTERY_FLAG_CHARGING 0x08
+#define BATTERY_FLAG_NO_BATTERY 0x80
+#define BATTERY_FLAG_UNKNOWN 0xFF
+
+#define BATTERY_PERCENTAGE_UNKNOWN 0xFF
+
+#define BATTERY_LIFE_UNKNOWN 0xFFFFFFFF
+
+typedef struct SYSTEM_POWER_STATUS_EX{
+ BYTE ACLineStatus;
+ BYTE BatteryFlag;
+ BYTE BatteryLifePercent;
+ BYTE Reserved1;
+ DWORD BatteryLifeTime;
+ DWORD BatteryFullLifeTime;
+ BYTE Reserved2;
+ BYTE BackupBatteryFlag;
+ BYTE BackupBatteryLifePercent;
+ BYTE Reserved3;
+ DWORD BackupBatteryLifeTime;
+ DWORD BackupBatteryFullLifeTime;
+} SYSTEM_POWER_STATUS_EX;
+
+typedef SYSTEM_POWER_STATUS_EX * PSYSTEM_POWER_STATUS_EX;
+
+typedef SYSTEM_POWER_STATUS_EX * LPSYSTEM_POWER_STATUS_EX;
+
+
+//
+// MessageId: CERAPI_E_ALREADYINITIALIZED
+//
+// CeRapiInit(Ex) has already been successfully called
+//
+#define CERAPI_E_ALREADYINITIALIZED 0x80041001
+
+typedef struct RAPIINIT
+{
+ DWORD cbSize;
+ HANDLE heRapiInit;
+ HRESULT hrRapiInit;
+} RAPIINIT;
+
+//
+// Instruction set definitions for CeQueryInstructionSet()
+//
+// PROCESSOR_ARCHITECTURE_x are already defined in desktop winnt.h
+// Here we include the CE specific definitions from CE winnt.h
+//
+#define PROCESSOR_INSTRUCTION_CODE(arch, core, feature) \
+ ((arch) << 24 | (core) << 16 | (feature))
+#define PROCESSOR_X86_32BIT_CORE 1
+
+#define PROCESSOR_MIPS16_CORE 1
+#define PROCESSOR_MIPSII_CORE 2
+#define PROCESSOR_MIPSIV_CORE 3
+
+#define PROCESSOR_HITACHI_SH3_CORE 1
+#define PROCESSOR_HITACHI_SH4_CORE 2
+
+#define PROCESSOR_ARM_V4_CORE 1
+#define PROCESSOR_ARM_V4I_CORE 2
+#define PROCESSOR_ARM_V4T_CORE 3
+
+#define PROCESSOR_FEATURE_NOFP 0
+#define PROCESSOR_FEATURE_FP 1
+#define PROCESSOR_FEATURE_DSP PROCESSOR_FEATURE_FP
+
+#define PROCESSOR_QUERY_INSTRUCTION PROCESSOR_INSTRUCTION_CODE(0,0,0)
+
+#define PROCESSOR_X86_32BIT_INSTRUCTION \
+ PROCESSOR_INSTRUCTION_CODE(PROCESSOR_ARCHITECTURE_INTEL, PROCESSOR_X86_32BIT_CORE, PROCESSOR_FEATURE_FP)
+
+#define PROCESSOR_MIPS_MIPS16_INSTRUCTION \
+ PROCESSOR_INSTRUCTION_CODE(PROCESSOR_ARCHITECTURE_MIPS, PROCESSOR_MIPS16_CORE, PROCESSOR_FEATURE_NOFP)
+#define PROCESSOR_MIPS_MIPSII_INSTRUCTION \
+ PROCESSOR_INSTRUCTION_CODE(PROCESSOR_ARCHITECTURE_MIPS, PROCESSOR_MIPSII_CORE, PROCESSOR_FEATURE_NOFP)
+#define PROCESSOR_MIPS_MIPSIIFP_INSTRUCTION \
+ PROCESSOR_INSTRUCTION_CODE(PROCESSOR_ARCHITECTURE_MIPS, PROCESSOR_MIPSII_CORE, PROCESSOR_FEATURE_FP)
+#define PROCESSOR_MIPS_MIPSIV_INSTRUCTION \
+ PROCESSOR_INSTRUCTION_CODE(PROCESSOR_ARCHITECTURE_MIPS, PROCESSOR_MIPSIV_CORE, PROCESSOR_FEATURE_NOFP)
+#define PROCESSOR_MIPS_MIPSIVFP_INSTRUCTION \
+ PROCESSOR_INSTRUCTION_CODE(PROCESSOR_ARCHITECTURE_MIPS, PROCESSOR_MIPSIV_CORE, PROCESSOR_FEATURE_FP)
+
+#define PROCESSOR_HITACHI_SH3_INSTRUCTION \
+ PROCESSOR_INSTRUCTION_CODE(PROCESSOR_ARCHITECTURE_SHX, PROCESSOR_HITACHI_SH3_CORE, PROCESSOR_FEATURE_NOFP)
+#define PROCESSOR_HITACHI_SH3DSP_INSTRUCTION \
+ PROCESSOR_INSTRUCTION_CODE(PROCESSOR_ARCHITECTURE_SHX, PROCESSOR_HITACHI_SH3_CORE, PROCESSOR_FEATURE_DSP)
+#define PROCESSOR_HITACHI_SH4_INSTRUCTION \
+ PROCESSOR_INSTRUCTION_CODE(PROCESSOR_ARCHITECTURE_SHX, PROCESSOR_HITACHI_SH4_CORE, PROCESSOR_FEATURE_FP)
+
+#define PROCESSOR_ARM_V4_INSTRUCTION \
+ PROCESSOR_INSTRUCTION_CODE(PROCESSOR_ARCHITECTURE_ARM, PROCESSOR_ARM_V4_CORE, PROCESSOR_FEATURE_NOFP)
+#define PROCESSOR_ARM_V4FP_INSTRUCTION \
+ PROCESSOR_INSTRUCTION_CODE(PROCESSOR_ARCHITECTURE_ARM, PROCESSOR_ARM_V4_CORE, PROCESSOR_FEATURE_FP)
+#define PROCESSOR_ARM_V4I_INSTRUCTION \
+ PROCESSOR_INSTRUCTION_CODE(PROCESSOR_ARCHITECTURE_ARM, PROCESSOR_ARM_V4I_CORE, PROCESSOR_FEATURE_NOFP)
+#define PROCESSOR_ARM_V4IFP_INSTRUCTION \
+ PROCESSOR_INSTRUCTION_CODE(PROCESSOR_ARCHITECTURE_ARM, PROCESSOR_ARM_V4I_CORE, PROCESSOR_FEATURE_FP)
+#define PROCESSOR_ARM_V4T_INSTRUCTION \
+ PROCESSOR_INSTRUCTION_CODE(PROCESSOR_ARCHITECTURE_ARM, PROCESSOR_ARM_V4T_CORE, PROCESSOR_FEATURE_NOFP)
+#define PROCESSOR_ARM_V4TFP_INSTRUCTION \
+ PROCESSOR_INSTRUCTION_CODE(PROCESSOR_ARCHITECTURE_ARM, PROCESSOR_ARM_V4T_CORE, PROCESSOR_FEATURE_FP)
+
+
+#endif // !UNDER_CE
diff --git a/Src/Plugins/Portable/pmp_activesync/activesync/Inc/rapitypes2.h b/Src/Plugins/Portable/pmp_activesync/activesync/Inc/rapitypes2.h
new file mode 100644
index 00000000..aa429fbc
--- /dev/null
+++ b/Src/Plugins/Portable/pmp_activesync/activesync/Inc/rapitypes2.h
@@ -0,0 +1,248 @@
+// ***************************************************************************
+// rapitypes2.h
+//
+// Copyright 2003 Microsoft Corporation, All Rights Reserved
+//
+// Types needed for RAPI2.
+//
+// ***************************************************************************
+
+#pragma once
+
+#ifdef MIDL_ONLY
+
+#include <basetsd.h>
+
+typedef struct OVERLAPPED {
+ ULONG_PTR Internal;
+ ULONG_PTR InternalHigh;
+ union UNION_OFFSET_POINTER{
+ struct OFFSET{
+ DWORD Offset;
+ DWORD OffsetHigh;
+ } OFFSET;
+
+ PVOID Pointer;
+ } UNION_OFFSET_POINTER;
+
+ HANDLE hEvent;
+} OVERLAPPED;
+
+typedef OVERLAPPED * LPOVERLAPPED;
+
+#define CONST const
+typedef CONST void far *LPCVOID;
+typedef LONG *PLONG;
+
+typedef struct STARTUPINFOA {
+ DWORD cb;
+ LPSTR lpReserved;
+ LPSTR lpDesktop;
+ LPSTR lpTitle;
+ DWORD dwX;
+ DWORD dwY;
+ DWORD dwXSize;
+ DWORD dwYSize;
+ DWORD dwXCountChars;
+ DWORD dwYCountChars;
+ DWORD dwFillAttribute;
+ DWORD dwFlags;
+ WORD wShowWindow;
+ WORD cbReserved2;
+ LPBYTE lpReserved2;
+ HANDLE hStdInput;
+ HANDLE hStdOutput;
+ HANDLE hStdError;
+} STARTUPINFOA;
+
+typedef STARTUPINFOA * LPSTARTUPINFOA;
+
+typedef struct STARTUPINFOW {
+ DWORD cb;
+ LPWSTR lpReserved;
+ LPWSTR lpDesktop;
+ LPWSTR lpTitle;
+ DWORD dwX;
+ DWORD dwY;
+ DWORD dwXSize;
+ DWORD dwYSize;
+ DWORD dwXCountChars;
+ DWORD dwYCountChars;
+ DWORD dwFillAttribute;
+ DWORD dwFlags;
+ WORD wShowWindow;
+ WORD cbReserved2;
+ LPBYTE lpReserved2;
+ HANDLE hStdInput;
+ HANDLE hStdOutput;
+ HANDLE hStdError;
+} STARTUPINFOW;
+
+typedef STARTUPINFOW * LPSTARTUPINFOW;
+
+#ifdef UNICODE
+typedef STARTUPINFOW STARTUPINFO;
+typedef LPSTARTUPINFOW LPSTARTUPINFO;
+#else
+typedef STARTUPINFOA STARTUPINFO;
+typedef LPSTARTUPINFOA LPSTARTUPINFO;
+#endif // UNICODE
+
+typedef struct PROCESS_INFORMATION {
+ HANDLE hProcess;
+ HANDLE hThread;
+ DWORD dwProcessId;
+ DWORD dwThreadId;
+} PROCESS_INFORMATION;
+
+typedef PROCESS_INFORMATION * PPROCESS_INFORMATION;
+typedef PROCESS_INFORMATION * LPPROCESS_INFORMATION;
+
+typedef DWORD ACCESS_MASK;
+typedef ACCESS_MASK REGSAM;
+typedef HKEY *PHKEY;
+
+typedef struct SYSTEM_INFO {
+ union UNION_OEMID_PROCESSOR_INFO{
+ DWORD dwOemId; // Obsolete field...do not use
+ struct PROCESSOR_INFO{
+ WORD wProcessorArchitecture;
+ WORD wReserved;
+ } PROCESSOR_INFO;
+ } UNION_OEMID_PROCESSOR_INFO;
+ DWORD dwPageSize;
+ LPVOID lpMinimumApplicationAddress;
+ LPVOID lpMaximumApplicationAddress;
+ DWORD_PTR dwActiveProcessorMask;
+ DWORD dwNumberOfProcessors;
+ DWORD dwProcessorType;
+ DWORD dwAllocationGranularity;
+ WORD wProcessorLevel;
+ WORD wProcessorRevision;
+} SYSTEM_INFO;
+typedef SYSTEM_INFO * LPSYSTEM_INFO;
+
+
+typedef struct MEMORYSTATUS {
+ DWORD dwLength;
+ DWORD dwMemoryLoad;
+ SIZE_T dwTotalPhys;
+ SIZE_T dwAvailPhys;
+ SIZE_T dwTotalPageFile;
+ SIZE_T dwAvailPageFile;
+ SIZE_T dwTotalVirtual;
+ SIZE_T dwAvailVirtual;
+} MEMORYSTATUS;
+
+typedef MEMORYSTATUS * LPMEMORYSTATUS;
+
+#define _SS_MAXSIZE 128 // Maximum size.
+#define _SS_ALIGNSIZE (sizeof(__int64)) // Desired alignment.
+#define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof (short))
+#define _SS_PAD2SIZE (_SS_MAXSIZE - (sizeof (short) + _SS_PAD1SIZE \
+ + _SS_ALIGNSIZE))
+/*
+typedef struct sockaddr_storage {
+ short ss_family; // Address family.
+ char __ss_pad1[_SS_PAD1SIZE]; // 6 byte pad, this is to make
+ // implementation specific pad up to
+ // alignment field that follows explicit
+ // in the data structure.
+ __int64 __ss_align; // Field to force desired structure.
+ char __ss_pad2[_SS_PAD2SIZE]; // 112 byte pad to achieve desired size;
+ // _SS_MAXSIZE value minus size of
+ // ss_family, __ss_pad1, and
+ // __ss_align fields is 112.
+} sockaddr_storage ;
+
+typedef struct sockaddr_storage SOCKADDR_STORAGE;
+*/
+#endif // MIDL_ONLY
+
+// end gross struct copy hack (everything after this is previously hacked from CE stuff that doesn't exist on desktop, so leave it as is).
+
+//
+// DEVICEID structure
+//
+typedef GUID RAPIDEVICEID;
+#define RAPIDEVICEID_BACKCOMPAT GUID_NULL // device id for older devices
+
+#ifndef UNDER_CE
+
+// this is defined in CE's pwinuser.h, so we only want it for desktop
+typedef struct {
+ DWORD dwMajor;
+ DWORD dwMinor;
+} PLATFORMVERSION;
+
+#endif
+
+//
+// struct to hold additional platforms and their versions.
+//
+#define MAX_SUB_PLATFORMS 6
+
+typedef struct RAPI_DEVICE_PLATFORM
+{
+ BSTR bstrName;
+ DWORD dwMajor;
+ DWORD dwMinor;
+} RAPI_DEVICE_PLATFORM;
+
+//
+// RAPI_DEVICEINFO
+//
+typedef struct RAPI_DEVICEINFO
+{
+ RAPIDEVICEID DeviceId;
+ DWORD dwOsVersionMajor;
+ DWORD dwOsVersionMinor;
+ BSTR bstrName;
+ BSTR bstrPlatform;
+} RAPI_DEVICEINFO;
+
+#define FreeDeviceInfoData(pDevInfo) \
+ do \
+ { \
+ SysFreeString((pDevInfo)->bstrName); \
+ SysFreeString((pDevInfo)->bstrPlatform); \
+ } while (0,0)
+
+#ifndef MIDL_ONLY
+#include "winsock2.h"
+#endif
+
+//
+// RAPI_DEVICESTATUS
+//
+typedef enum RAPI_DEVICESTATUS
+{
+ RAPI_DEVICE_DISCONNECTED = 0,
+ RAPI_DEVICE_CONNECTED = 1,
+} RAPI_DEVICESTATUS;
+
+//
+// op codes for IRAPIDesktop funcs
+//
+typedef enum RAPI_GETDEVICEOPCODE
+{
+ RAPI_GETDEVICE_NONBLOCKING,
+ RAPI_GETDEVICE_BLOCKING
+} RAPI_GETDEVICEOPCODE;
+
+//
+// Connected type codes
+//
+typedef enum RAPI_CONNECTIONTYPE
+{
+ RAPI_CONNECTION_USB = 0,
+ RAPI_CONNECTION_IR = 1,
+ RAPI_CONNECTION_SERIAL = 2,
+ RAPI_CONNECTION_NETWORK = 3,
+} RAPI_CONNECTIONTYPE;
+
+typedef struct RAPI_CONNECTIONINFO {
+ SOCKADDR_STORAGE ipaddr;
+ SOCKADDR_STORAGE hostIpaddr;
+ RAPI_CONNECTIONTYPE connectionType;
+} RAPI_CONNECTIONINFO;
diff --git a/Src/Plugins/Portable/pmp_activesync/activesync/Lib/rapiuuid.lib b/Src/Plugins/Portable/pmp_activesync/activesync/Lib/rapiuuid.lib
new file mode 100644
index 00000000..8b60d9af
--- /dev/null
+++ b/Src/Plugins/Portable/pmp_activesync/activesync/Lib/rapiuuid.lib
Binary files differ
diff --git a/Src/Plugins/Portable/pmp_activesync/main.cpp b/Src/Plugins/Portable/pmp_activesync/main.cpp
new file mode 100644
index 00000000..a1408050
--- /dev/null
+++ b/Src/Plugins/Portable/pmp_activesync/main.cpp
@@ -0,0 +1,220 @@
+//#define PLUGIN_NAME "Nullsoft ActiveSync Plug-in"
+#define PLUGIN_VERSION L"0.25"
+
+#include "ASDevice.h"
+
+int init();
+void quit();
+intptr_t MessageProc(int msg, intptr_t param1, intptr_t param2, intptr_t param3);
+
+extern PMPDevicePlugin plugin = {PMPHDR_VER,0,init,quit,MessageProc};
+
+static HANDLE killEvent=0, hThread=0;
+static DWORD WINAPI ThreadFunc(LPVOID lpParam);
+
+IRAPIDesktop *pIRapiDesktop = NULL;
+
+// wasabi based services for localisation support
+api_language *WASABI_API_LNG = 0;
+HINSTANCE WASABI_API_LNG_HINST = 0, WASABI_API_ORIG_HINST = 0;
+
+std::vector<ASDevice*> devices;
+
+std::vector<ejectedDevice*> ejected;
+static RAPIDEVICEID lastDevId;
+
+
+class MyRAPISink : public IRAPISink {
+public:
+ virtual HRESULT STDMETHODCALLTYPE OnDeviceConnected(IRAPIDevice *pIDevice) {
+ RAPI_DEVICEINFO devInfo;
+ if(!SUCCEEDED(pIDevice->GetDeviceInfo(&devInfo))) return S_OK;
+ SysFreeString(devInfo.bstrName);
+ SysFreeString(devInfo.bstrPlatform);
+
+ EnterCriticalSection(&cs);
+
+ lastDevId = devInfo.DeviceId;
+ for(unsigned int i=0; i<ejected.size(); i++) {
+ if(devInfo.DeviceId == ejected[i]->id) {
+ ejected[i]->marked=true;
+ LeaveCriticalSection(&cs);
+ return S_OK;
+ }
+ }
+
+ for(unsigned int i=0; i<devices.size(); i++) {
+ if(devInfo.DeviceId == devices[i]->devInfo.DeviceId || devices[i]->pIDevice == pIDevice) {
+ LeaveCriticalSection(&cs);
+ return S_OK;
+ }
+ }
+
+ IRAPISession *pISession = NULL;
+ if (SUCCEEDED(pIDevice->CreateSession(&pISession))) {
+ if (SUCCEEDED(pISession->CeRapiInit())) devices.push_back(new ASDevice(pIDevice,pISession));
+ else pISession->Release();
+ }
+
+ LeaveCriticalSection(&cs);
+ return S_OK;
+ }
+
+ virtual HRESULT STDMETHODCALLTYPE OnDeviceDisconnected(IRAPIDevice *pIDevice) {
+ EnterCriticalSection(&cs);
+ RAPI_DEVICEINFO devInfo;
+ if(!SUCCEEDED(pIDevice->GetDeviceInfo(&devInfo))) return S_OK;
+ for(unsigned int i=0; i<devices.size(); i++) {
+ if(devInfo.DeviceId == devices[i]->devInfo.DeviceId || devices[i]->pIDevice == pIDevice) {
+ SendMessage(plugin.hwndPortablesParent,WM_PMP_IPC,(intptr_t)devices[i],PMP_IPC_DEVICEDISCONNECTED);
+ delete devices[i];
+ }
+ }
+ SysFreeString(devInfo.bstrName);
+ SysFreeString(devInfo.bstrPlatform);
+ LeaveCriticalSection(&cs);
+ return S_OK;
+ }
+
+ DWORD RAPISinkContext;
+ CRITICAL_SECTION cs;
+ ULONG refs;
+ MyRAPISink() {refs=1; InitializeCriticalSection(&cs);}
+ ~MyRAPISink() { DeleteCriticalSection(&cs); }
+ #define IMPLEMENTS(ifc) if (riid == IID_ ## ifc) { ++refs; *ppvObject = static_cast<ifc *>(this); return S_OK; }
+ virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid,void __RPC_FAR *__RPC_FAR *ppvObject) {
+ IMPLEMENTS(IRAPISink);
+ IMPLEMENTS(IUnknown);
+ *ppvObject = NULL;
+ return E_NOINTERFACE;
+ }
+ virtual ULONG STDMETHODCALLTYPE AddRef() { return ++refs; }
+ virtual ULONG STDMETHODCALLTYPE Release() { int x = --refs; if(!x) delete this; return x; }
+ #undef IMPLEMENTS
+};
+
+MyRAPISink *pMyRapiSink=NULL;
+
+int init() {
+ CoInitializeEx(NULL, COINIT_MULTITHREADED);
+
+ HRESULT hr = CoCreateInstance(CLSID_RAPI,NULL,CLSCTX_INPROC_SERVER,IID_IRAPIDesktop,(void**)&pIRapiDesktop);
+ if(!SUCCEEDED(hr) || !pIRapiDesktop) return -1; // no activesync on this computer!
+
+ // loader so that we can get the localisation service api for use
+ waServiceFactory *sf = plugin.service->service_getServiceByGuid(languageApiGUID);
+ if (sf) WASABI_API_LNG = reinterpret_cast<api_language*>(sf->getInterface());
+
+ // need to have this initialised before we try to do anything with localisation features
+ WASABI_API_START_LANG(plugin.hDllInstance,PmpACTIVESYNCLangGUID);
+
+ static wchar_t szDescription[256];
+ swprintf(szDescription, ARRAYSIZE(szDescription),
+ WASABI_API_LNGSTRINGW(IDS_NULLSOFT_ACTIVESYNC_PLUGIN), PLUGIN_VERSION);
+ plugin.description = szDescription;
+
+ killEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
+ DWORD dwThreadId;
+ hThread = CreateThread(NULL, 0, ThreadFunc, NULL, 0, &dwThreadId);
+
+ return 0;
+}
+
+static void enumDevices() {
+ // find all the currently connected devices
+ IRAPIEnumDevices* pIRapiEnumDevices = NULL;
+ HRESULT hr = pIRapiDesktop->EnumDevices(&pIRapiEnumDevices);
+
+ for (unsigned int i = 0; i < ejected.size(); i++) ejected[i]->marked = false;
+
+ while (SUCCEEDED(hr) && pIRapiEnumDevices) {
+ IRAPIDevice* pIRapiDevice = NULL;
+ hr = pIRapiEnumDevices->Next(&pIRapiDevice);
+ if (SUCCEEDED(hr) && pIRapiDevice) {
+ pMyRapiSink->OnDeviceConnected(pIRapiDevice);
+ pIRapiDevice->Release();
+ }
+ else {
+ pIRapiEnumDevices->Release();
+ pIRapiEnumDevices = NULL;
+ }
+ }
+
+ //for (unsigned int i = 0; i < ejected.size(); i++)
+ //{
+ // if (!ejected[i]->marked)
+ // {
+ // free(ejected[i]);
+ // ejected.eraseindex(i);
+ // }
+ //}
+ auto it = ejected.begin();
+ while (it != ejected.end())
+ {
+ ejectedDevice* dev = *it;
+ if (!dev->marked)
+ {
+ free(dev);
+ it = ejected.erase(it);
+ }
+ else
+ {
+ it++;
+ }
+ }
+}
+
+static void init2() {
+ // set up device connection/disconnection notifications
+ pMyRapiSink = new MyRAPISink();
+ pIRapiDesktop->Advise(pMyRapiSink,(DWORD_PTR*)&pMyRapiSink->RAPISinkContext);
+
+ // find currently attached devices
+ enumDevices();
+}
+
+void quit() {
+ SetEvent(killEvent);
+ if (hThread) {
+ for(;;) {
+ int val = WaitForSingleObjectEx(hThread,15000,TRUE);
+ if(val == WAIT_OBJECT_0) { CloseHandle(hThread); break; }
+ else if(val == WAIT_TIMEOUT) { TerminateThread(hThread, 0); break; }
+ else continue;
+ }
+ }
+ CloseHandle(killEvent);
+
+ pIRapiDesktop->UnAdvise(pMyRapiSink->RAPISinkContext);
+ pIRapiDesktop->Release();
+ pMyRapiSink->Release();
+ CoUninitialize();
+ for(unsigned int i=0; i<ejected.size(); i++) free(ejected[i]);
+}
+
+static DWORD WINAPI ThreadFunc(LPVOID lpParam) {
+ CoInitializeEx(0,COINIT_MULTITHREADED);
+ init2();
+ while (WaitForSingleObjectEx(killEvent,5000,TRUE) != WAIT_OBJECT_0) {
+ // FUCKO: For some reason I'm not getting the device connected notifications, so lets just enum for devices on a regular basis.
+ enumDevices();
+ }
+ CoUninitialize();
+ return 0;
+}
+
+intptr_t MessageProc(int msg, intptr_t param1, intptr_t param2, intptr_t param3) {
+ if (msg == PMP_NO_CONFIG)
+ return TRUE;
+
+ return FALSE;
+}
+
+extern "C" {
+ __declspec( dllexport ) PMPDevicePlugin * winampGetPMPDevicePlugin(){return &plugin;}
+ __declspec( dllexport ) int winampUninstallPlugin(HINSTANCE hDllInst, HWND hwndDlg, int param) {
+ int i = (int)devices.size();
+ while(i-- > 0) devices[i]->Close();
+ return PMP_PLUGIN_UNINSTALL_NOW;
+ }
+}; \ No newline at end of file
diff --git a/Src/Plugins/Portable/pmp_activesync/pmp_activesync.rc b/Src/Plugins/Portable/pmp_activesync/pmp_activesync.rc
new file mode 100644
index 00000000..a74b7178
--- /dev/null
+++ b/Src/Plugins/Portable/pmp_activesync/pmp_activesync.rc
@@ -0,0 +1,116 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "#include ""version.rc2""\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// RCDATA
+//
+
+IDR_ACTIVESYNC_ICON RCDATA ".\\resources\\activeSyncIcon.png"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_CONFIG DIALOGEX 0, 0, 264, 226
+STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE | WS_SYSMENU
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ GROUPBOX "Folders",IDC_STATIC,4,3,255,83
+ LTEXT "Music Folder",IDC_STATIC,8,16,40,8
+ EDITTEXT IDC_FOLDER_MUSIC,56,14,197,14,ES_AUTOHSCROLL
+ LTEXT "Video Folder",IDC_STATIC,8,32,40,8
+ EDITTEXT IDC_FOLDER_VIDEO,56,30,197,14,ES_AUTOHSCROLL
+ LTEXT "Playlist Folder",IDC_STATIC,8,49,45,8
+ EDITTEXT IDC_FOLDER_PLAYLIST,56,46,197,14,ES_AUTOHSCROLL
+ PUSHBUTTON "Rescan folders",IDC_RESCAN,7,66,56,14
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE
+BEGIN
+ IDS_NULLSOFT_ACTIVESYNC_PLUGIN "Nullsoft ActiveSync Plug-in v%s"
+ 65535 "{B81F32B8-4AA4-4eba-8798-95F13812F638}"
+END
+
+STRINGTABLE
+BEGIN
+ IDS_LOADING "Loading %s..."
+ IDS_TRANSFERRING "Transferring..."
+ IDS_CANNOT_OPEN_LOCAL_FILE "Cannot open local file"
+ IDS_CANNOT_OPEN_FILE_ON_DEVICE "Cannot open file on device"
+ IDS_ERROR_WRITING_FILE "Error writing to file"
+ IDS_TRANSFERRING_PERCENT "Transferring %d%%"
+ IDS_DONE "Done"
+ IDS_CANNOT_OPEN_DESTINATION "Cannot open destination file"
+ IDS_ADVANCED "Advanced"
+END
+
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+#include "version.rc2"
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/Src/Plugins/Portable/pmp_activesync/pmp_activesync.sln b/Src/Plugins/Portable/pmp_activesync/pmp_activesync.sln
new file mode 100644
index 00000000..f8e22711
--- /dev/null
+++ b/Src/Plugins/Portable/pmp_activesync/pmp_activesync.sln
@@ -0,0 +1,18 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pmp_activesync", "pmp_activesync.vcproj", "{60D71BB7-D741-444E-99ED-7249A716B99F}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {60D71BB7-D741-444E-99ED-7249A716B99F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {60D71BB7-D741-444E-99ED-7249A716B99F}.Release|Win32.ActiveCfg = Release|Win32
+ {60D71BB7-D741-444E-99ED-7249A716B99F}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/Src/Plugins/Portable/pmp_activesync/pmp_activesync.vcxproj b/Src/Plugins/Portable/pmp_activesync/pmp_activesync.vcxproj
new file mode 100644
index 00000000..9100716b
--- /dev/null
+++ b/Src/Plugins/Portable/pmp_activesync/pmp_activesync.vcxproj
@@ -0,0 +1,357 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <VCProjectVersion>17.0</VCProjectVersion>
+ <ProjectGuid>{60D71BB7-D741-444E-99ED-7249A716B99F}</ProjectGuid>
+ <RootNamespace>pmp_activesync</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>17.0.32505.173</_ProjectFileVersion>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <OutDir>$(PlatformShortName)_$(Configuration)\</OutDir>
+ <IntDir>$(PlatformShortName)_$(Configuration)\</IntDir>
+ <LinkIncremental>false</LinkIncremental>
+ <IncludePath>$(IncludePath)</IncludePath>
+ <LibraryPath>$(LibraryPath)</LibraryPath>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <IncludePath>$(IncludePath)</IncludePath>
+ <LibraryPath>$(LibraryPath)</LibraryPath>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <OutDir>$(PlatformShortName)_$(Configuration)\</OutDir>
+ <IntDir>$(PlatformShortName)_$(Configuration)\</IntDir>
+ <LinkIncremental>false</LinkIncremental>
+ <GenerateManifest>true</GenerateManifest>
+ <IncludePath>$(IncludePath)</IncludePath>
+ <LibraryPath>$(LibraryPath)</LibraryPath>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <GenerateManifest>true</GenerateManifest>
+ <IncludePath>$(IncludePath)</IncludePath>
+ <LibraryPath>$(LibraryPath)</LibraryPath>
+ </PropertyGroup>
+ <PropertyGroup Label="Vcpkg">
+ <VcpkgEnabled>false</VcpkgEnabled>
+ </PropertyGroup>
+ <PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <VcpkgConfiguration>Debug</VcpkgConfiguration>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>$(IntDir)$(TargetName).tlb</TypeLibraryName>
+ <HeaderFileName />
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..\replicant;activesync\Inc;..\..\..\Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_WINDOWS;_USRDLL;ML_ex_EXPORTS;WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <IgnoreStandardIncludePath>false</IgnoreStandardIncludePath>
+ <StringPooling>true</StringPooling>
+ <MinimalRebuild>false</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BufferSecurityCheck>true</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader />
+ <PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>rapiuuid.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <AdditionalLibraryDirectories>activesync\Lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
+ <GenerateMapFile>false</GenerateMapFile>
+ <MapExports>false</MapExports>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention />
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ <MapFileName>$(IntDir)$(TargetName).map</MapFileName>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ <IgnoreSpecificDefaultLibraries>libc.lib;msvcprt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ </Link>
+ <PostBuildEvent>
+ <Command>xcopy /Y /D $(OutDir)*.dll ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\
+xcopy /Y /D $(IntDir)*.pdb ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\ </Command>
+ <Message>Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\'</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TypeLibraryName>$(IntDir)$(TargetName).tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..\replicant;activesync\Inc;..\..\..\Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_WINDOWS;_USRDLL;ML_ex_EXPORTS;WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <IgnoreStandardIncludePath>false</IgnoreStandardIncludePath>
+ <StringPooling>true</StringPooling>
+ <MinimalRebuild>false</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BufferSecurityCheck>true</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>rapiuuid.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <AdditionalLibraryDirectories>activesync\Lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
+ <GenerateMapFile>false</GenerateMapFile>
+ <MapExports>false</MapExports>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <MapFileName>$(IntDir)$(TargetName).map</MapFileName>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ <IgnoreSpecificDefaultLibraries>libc.lib;msvcprt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ </Link>
+ <PostBuildEvent>
+ <Command>xcopy /Y /D $(OutDir)*.dll ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\
+xcopy /Y /D $(IntDir)*.pdb ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\ </Command>
+ <Message>Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\'</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>$(IntDir)$(TargetName).tlb</TypeLibraryName>
+ <HeaderFileName />
+ </Midl>
+ <ClCompile>
+ <Optimization>MinSpace</Optimization>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <AdditionalIncludeDirectories>..\..\..\replicant;activesync\Inc;..\..\..\Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_WINDOWS;_USRDLL;ML_ex_EXPORTS;_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <IgnoreStandardIncludePath>false</IgnoreStandardIncludePath>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>true</BufferSecurityCheck>
+ <PrecompiledHeader />
+ <PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>None</DebugInformationFormat>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>rapiuuid.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <AdditionalLibraryDirectories>activesync\Lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <IgnoreSpecificDefaultLibraries>libc.lib;msvcprt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
+ <MapFileName>$(IntDir)$(TargetName).map</MapFileName>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ </Link>
+ <PostBuildEvent>
+ <Command>xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\ </Command>
+ <Message>Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\'</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TypeLibraryName>$(IntDir)$(TargetName).tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>MinSpace</Optimization>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <AdditionalIncludeDirectories>..\..\..\replicant;activesync\Inc;..\..\..\Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_WINDOWS;_USRDLL;ML_ex_EXPORTS;_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <IgnoreStandardIncludePath>false</IgnoreStandardIncludePath>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>true</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>None</DebugInformationFormat>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>rapiuuid.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <AdditionalLibraryDirectories>activesync\Lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <IgnoreSpecificDefaultLibraries>libc.lib;msvcprt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
+ <MapFileName>$(IntDir)$(TargetName).map</MapFileName>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ </Link>
+ <PostBuildEvent>
+ <Command>xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\ </Command>
+ <Message>Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\Plugins\'</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\General\gen_ml\ml_lib.cpp" />
+ <ClCompile Include="ASDevice.cpp" />
+ <ClCompile Include="main.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\General\gen_ml\ml.h" />
+ <ClInclude Include="..\..\Library\ml_pmp\pmp.h" />
+ <ClInclude Include="ASDevice.h" />
+ <ClInclude Include="resource.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <Image Include="resources\activeSyncIcon.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="pmp_activesync.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\..\Wasabi\Wasabi.vcxproj">
+ <Project>{3e0bfa8a-b86a-42e9-a33f-ec294f823f7f}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/Src/Plugins/Portable/pmp_activesync/pmp_activesync.vcxproj.filters b/Src/Plugins/Portable/pmp_activesync/pmp_activesync.vcxproj.filters
new file mode 100644
index 00000000..7627405a
--- /dev/null
+++ b/Src/Plugins/Portable/pmp_activesync/pmp_activesync.vcxproj.filters
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{b35076f0-5e1b-4df9-baa4-ef63b5b1e046}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{5ed7e868-d2e1-4274-890e-0f94583196e2}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl</Extensions>
+ </Filter>
+ <Filter Include="resources">
+ <UniqueIdentifier>{194593b8-f700-465e-aa6d-b982a8271c7e}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="ASDevice.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="main.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\General\gen_ml\ml_lib.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="ASDevice.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="resource.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\General\gen_ml\ml.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\Library\ml_pmp\pmp.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <Image Include="resources\activeSyncIcon.png">
+ <Filter>resources</Filter>
+ </Image>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="pmp_activesync.rc">
+ <Filter>resources</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/Src/Plugins/Portable/pmp_activesync/resource.h b/Src/Plugins/Portable/pmp_activesync/resource.h
new file mode 100644
index 00000000..e54c6a67
--- /dev/null
+++ b/Src/Plugins/Portable/pmp_activesync/resource.h
@@ -0,0 +1,31 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by pmp_activesync.rc
+//
+#define IDS_LOADING 1
+#define IDS_TRANSFERRING 2
+#define IDS_CANNOT_OPEN_LOCAL_FILE 3
+#define IDS_CANNOT_OPEN_FILE_ON_DEVICE 4
+#define IDS_ERROR_WRITING_FILE 5
+#define IDS_TRANSFERRING_PERCENT 6
+#define IDS_DONE 7
+#define IDS_CANNOT_OPEN_DESTINATION 8
+#define IDS_ADVANCED 9
+#define IDR_ACTIVESYNC_ICON 101
+#define IDD_CONFIG 102
+#define IDC_FOLDER_MUSIC 1001
+#define IDC_FOLDER_PLAYLIST 1002
+#define IDC_FOLDER_VIDEO 1003
+#define IDC_RESCAN 1004
+#define IDS_NULLSOFT_ACTIVESYNC_PLUGIN 65534
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 106
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1005
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/Src/Plugins/Portable/pmp_activesync/resources/activeSyncIcon.png b/Src/Plugins/Portable/pmp_activesync/resources/activeSyncIcon.png
new file mode 100644
index 00000000..ec7a5ab2
--- /dev/null
+++ b/Src/Plugins/Portable/pmp_activesync/resources/activeSyncIcon.png
Binary files differ
diff --git a/Src/Plugins/Portable/pmp_activesync/version.rc2 b/Src/Plugins/Portable/pmp_activesync/version.rc2
new file mode 100644
index 00000000..353480c4
--- /dev/null
+++ b/Src/Plugins/Portable/pmp_activesync/version.rc2
@@ -0,0 +1,39 @@
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+#include "../../../Winamp/buildType.h"
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 0,25,0,0
+ PRODUCTVERSION WINAMP_PRODUCTVER
+ FILEFLAGSMASK 0x17L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0"
+ BEGIN
+ VALUE "CompanyName", "Winamp SA"
+ VALUE "FileDescription", "Winamp Portable Device Plug-in"
+ VALUE "FileVersion", "0,25,0,0"
+ VALUE "InternalName", "Nullsoft ActiveSync"
+ VALUE "LegalCopyright", "Copyright © 2006-2023 Winamp SA"
+ VALUE "LegalTrademarks", "Nullsoft and Winamp are trademarks of Winamp SA"
+ VALUE "OriginalFilename", "pmp_activesync.dll"
+ VALUE "ProductName", "Winamp"
+ VALUE "ProductVersion", STR_WINAMP_PRODUCTVER
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+END