Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115/* * PROJECT: mydocs * LICENSE: LGPL-2.1+ (https://spdx.org/licenses/LGPL-2.1+) * PURPOSE: MyDocs implementation * COPYRIGHT: Copyright 2019 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) */
#include "precomp.hpp"
WINE_DEFAULT_DEBUG_CHANNEL(mydocs);
BEGIN_OBJECT_MAP(ObjectMap) OBJECT_ENTRY(CLSID_MyDocsDropHandler, CMyDocsDropHandler)END_OBJECT_MAP()
CComModule gModule;LONG g_ModuleRefCnt = 0;
static BOOLCreateEmptyFile(LPCWSTR pszFile){ HANDLE hFile; hFile = CreateFileW(pszFile, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile != INVALID_HANDLE_VALUE) { CloseHandle(hFile); return TRUE; } return FALSE;}
static HRESULTCreateSendToMyDocuments(LPCWSTR pszSendTo){ WCHAR szTarget[MAX_PATH], szSendToFile[MAX_PATH];
SHGetSpecialFolderPathW(NULL, szTarget, CSIDL_MYDOCUMENTS, FALSE);
StringCbCopyW(szSendToFile, sizeof(szSendToFile), pszSendTo); PathAppendW(szSendToFile, PathFindFileNameW(szTarget)); StringCbCatW(szSendToFile, sizeof(szSendToFile), L".mydocs");
if (!CreateEmptyFile(szSendToFile)) { ERR("CreateEmptyFile(%S, %S) failed!\n", szSendToFile, szTarget); return E_FAIL; }
return S_OK;}
static HRESULTGetDefaultUserSendTo(LPWSTR pszPath){ return SHGetFolderPathW(NULL, CSIDL_SENDTO, INVALID_HANDLE_VALUE, SHGFP_TYPE_DEFAULT, pszPath);}
STDAPI DllCanUnloadNow(void){ if (g_ModuleRefCnt) return S_FALSE; return gModule.DllCanUnloadNow();}
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv){ TRACE("CLSID:%s,IID:%s\n", wine_dbgstr_guid(&rclsid), wine_dbgstr_guid(&riid));
HRESULT hr = gModule.DllGetClassObject(rclsid, riid, ppv);
TRACE("-- pointer to class factory: %p\n", *ppv);
return hr;}
STDAPI DllRegisterServer(void){ HRESULT hr = gModule.DllRegisterServer(FALSE); if (FAILED_UNEXPECTEDLY(hr)) return hr;
WCHAR szSendTo[MAX_PATH]; hr = GetDefaultUserSendTo(szSendTo); if (SUCCEEDED(hr)) CreateSendToMyDocuments(szSendTo);
return S_OK;}
STDAPI DllUnregisterServer(void){ HRESULT hr = gModule.DllUnregisterServer(FALSE); if (FAILED_UNEXPECTEDLY(hr)) return hr;
return S_OK;}
STDAPI_(BOOL) DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID fImpLoad){ TRACE("%p 0x%x %p\n", hInstance, dwReason, fImpLoad); if (dwReason == DLL_PROCESS_ATTACH) { gModule.Init(ObjectMap, hInstance, NULL); DisableThreadLibraryCalls(hInstance); } else if (dwReason == DLL_PROCESS_DETACH) { gModule.Term(); } return TRUE;}