bool ServiceManager::Call(LPCSTR p_serviceID, LPCSTR p_function, const ServiceArg &p_arg1, const ServiceArg &p_arg2, const ServiceArg &p_arg3, const ServiceArg &p_arg4) { Service *service = GetService(p_serviceID); if (service) { ATOM function = FindAtomA(p_function); if (function) { if (typeid(p_arg4) != typeid(ServiceArg)) { return service->Call(function, p_arg1, p_arg2, p_arg3, p_arg4); } if (typeid(p_arg3) != typeid(ServiceArg)) { return service->Call(function, p_arg1, p_arg2, p_arg3); } if (typeid(p_arg2) != typeid(ServiceArg)) { return service->Call(function, p_arg1, p_arg2); } if (typeid(p_arg1) != typeid(ServiceArg)) { return service->Call(function, p_arg1); } return service->Call(function); } } return false; }
static HKEY GetKeyA(LPCSTR appname, BOOL * closekey, BOOL fCreate) { HKEY key = 0; char achName[MAX_PATH]; HRESULT hr; #if !MMPROFILECACHE *closekey = TRUE; #else UINT n; ATOM atm; *closekey = FALSE; // // See if we have already used this key // atm = FindAtomA(appname); if (atm != 0) { // Atom exists... search the table for it. for (n=0; n<keyscached; ++n) { if (akeyatoms[n] == atm) { DPF2(("Found existing key for %s\n", appname)); return ahkey[n]; } } } DPF2(("No key found for %s", appname)); #endif hr = StringCchCopyA(achName, MAX_PATH, KEYNAMEA); if (FAILED(hr)) OutputError(hr, IDS_SAFE_COPY); if ((!fCreate && RegOpenKeyA(ROOTKEY, achName, &key) == ERROR_SUCCESS) || (fCreate && RegCreateKeyA(ROOTKEY, achName, &key) == ERROR_SUCCESS)) { #if MMPROFILECACHE if ((keyscached < KEYSCACHED) && (atm = AddAtomA(appname))) { // Add this key to the cache array akeyatoms[keyscached] = atm; ahkey[keyscached] = key; DPF1(("Adding key %s to cache array in position %d\n", appname, keyscached)); ++keyscached; } else { DPF2(("Not adding key %s to cache array\n", appname)); *closekey = TRUE; } #endif } return(key); }
static HKEY GetKeyA(LPCSTR appname, BOOL * closekey, BOOL fCreate) { HKEY key = 0; char achName[MAX_PATH]; #if !MMPROFILECACHE *closekey = TRUE; #else UINT n; ATOM atm; *closekey = FALSE; // // See if we have already used this key // atm = FindAtomA(appname); if (atm != 0) { // Atom exists... search the table for it. for (n=0; n<keyscached; ++n) { if (akeyatoms[n] == atm) { DPF2(("Found existing key for %s\n", appname)); return ahkey[n]; } } } DPF2(("No key found for %s", appname)); #endif lstrcpyA(achName, KEYNAMEA); // Use registry under "CURRENT_USER\Software\Microsoft\Windiff\" //lstrcatA(achName, appname); if ((!fCreate && RegOpenKeyA(ROOTKEY, achName, &key) == ERROR_SUCCESS) || (fCreate && RegCreateKeyA(ROOTKEY, achName, &key) == ERROR_SUCCESS)) { #if MMPROFILECACHE if ((keyscached < KEYSCACHED) && (atm = AddAtomA(appname))) { // Add this key to the cache array akeyatoms[keyscached] = atm; ahkey[keyscached] = key; DPF1(("Adding key %s to cache array in position %d\n", appname, keyscached)); ++keyscached; } else { DPF2(("Not adding key %s to cache array\n", appname)); *closekey = TRUE; } #endif } return(key); }
bool ServiceManager::StartService(LPCSTR p_serviceID) { ATOM serviceID = FindAtomA(p_serviceID); Service *service = GetService(p_serviceID); if (service) { TRACE("Starting %s", p_serviceID); return service->Start(serviceID); } else { return false; } }
bool ServiceManager::SetServiceProperty(LPCSTR p_serviceID, LPCSTR p_property, const ServiceArg &p_value) { Service *service = GetService(p_serviceID); if (service) { //ATOM serviceID = FindAtomA(p_serviceID); ATOM propertyFn = FindAtom(TEXT("FN_SetProperty")); ATOM property = FindAtomA(p_property); return service->Call(propertyFn, Arg<ATOM>(property), p_value); //return service->SetProperty(serviceID, property, p_value); } else { return false; } }
static void test_local_error_handling(void) { char buffer[260]; WCHAR bufferW[260]; int i; memset( buffer, 'a', 256 ); buffer[256] = 0; ok( !AddAtomA(buffer), "add succeeded\n" ); ok( !FindAtomA(buffer), "find succeeded\n" ); if (unicode_OS) { for (i = 0; i < 256; i++) bufferW[i] = 'b'; bufferW[256] = 0; ok( !AddAtomW(bufferW), "add succeeded\n" ); ok( !FindAtomW(bufferW), "find succeeded\n" ); } }
Service *ServiceManager::GetService(LPCSTR p_serviceID) { ATOM serviceID = FindAtomA(p_serviceID); t_serviceList::iterator service = std::find_if(m_serviceList.begin(), m_serviceList.end(), std::bind2nd(std::mem_fun(&Service::IsService), serviceID)); if (service != m_serviceList.end()) { return *service; } else { Service *newService = KnownService(serviceID); if (newService) { AddService(newService); return newService; } else { TRACE("WARNING: Could not create service %s", p_serviceID); return NULL; } } }
static void test_local_add_atom(void) { ATOM atom, w_atom; INT_PTR i; SetLastError( 0xdeadbeef ); atom = AddAtomA( "foobar" ); ok( atom >= 0xc000, "bad atom id %x\n", atom ); ok( GetLastError() == 0xdeadbeef, "AddAtomA set last error\n" ); /* Verify that it can be found (or not) appropriately */ ok( FindAtomA( "foobar" ) == atom, "could not find atom foobar\n" ); ok( FindAtomA( "FOOBAR" ) == atom, "could not find atom FOOBAR\n" ); ok( !FindAtomA( "_foobar" ), "found _foobar\n" ); /* Add the same atom, specifying string as unicode; should * find the first one, not add a new one */ SetLastError( 0xdeadbeef ); w_atom = AddAtomW( foobarW ); if (w_atom && GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) unicode_OS = TRUE; else trace("WARNING: Unicode atom APIs are not supported on this platform\n"); if (unicode_OS) { ok( w_atom == atom, "Unicode atom does not match ASCII\n" ); ok( GetLastError() == 0xdeadbeef, "AddAtomW set last error\n" ); } /* Verify that it can be found (or not) appropriately via unicode name */ if (unicode_OS) { ok( FindAtomW( foobarW ) == atom, "could not find atom foobar\n" ); ok( FindAtomW( FOOBARW ) == atom, "could not find atom FOOBAR\n" ); ok( !FindAtomW( _foobarW ), "found _foobar\n" ); } /* Test integer atoms * (0x0001 .. 0xbfff) should be valid; * (0xc000 .. 0xffff) should be invalid */ SetLastError( 0xdeadbeef ); ok( AddAtomA(0) == 0 && GetLastError() == 0xdeadbeef, "succeeded to add atom 0\n" ); if (unicode_OS) { SetLastError( 0xdeadbeef ); ok( AddAtomW(0) == 0 && GetLastError() == 0xdeadbeef, "succeeded to add atom 0\n" ); } SetLastError( 0xdeadbeef ); for (i = 1; i <= 0xbfff; i++) { SetLastError( 0xdeadbeef ); ok( AddAtomA((LPCSTR)i) == i && GetLastError() == 0xdeadbeef, "failed to add atom %lx\n", i ); if (unicode_OS) { SetLastError( 0xdeadbeef ); ok( AddAtomW((LPCWSTR)i) == i && GetLastError() == 0xdeadbeef, "failed to add atom %lx\n", i ); } } for (i = 0xc000; i <= 0xffff; i++) { ok( !AddAtomA((LPCSTR)i), "succeeded adding %lx\n", i ); if (unicode_OS) ok( !AddAtomW((LPCWSTR)i), "succeeded adding %lx\n", i ); } }
static void test_RegisterClipboardFormatA(void) { ATOM atom_id; UINT format_id, format_id2; char buf[256]; int len; BOOL ret; HANDLE handle; format_id = RegisterClipboardFormatA("my_cool_clipboard_format"); ok(format_id > 0xc000 && format_id < 0xffff, "invalid clipboard format id %04x\n", format_id); format_id2 = RegisterClipboardFormatA("MY_COOL_CLIPBOARD_FORMAT"); ok(format_id2 == format_id, "invalid clipboard format id %04x\n", format_id2); len = GetClipboardFormatNameA(format_id, buf, 256); ok(len == lstrlenA("my_cool_clipboard_format"), "wrong format name length %d\n", len); ok(!lstrcmpA(buf, "my_cool_clipboard_format"), "wrong format name \"%s\"\n", buf); lstrcpyA(buf, "foo"); SetLastError(0xdeadbeef); len = GetAtomNameA((ATOM)format_id, buf, 256); ok(len == 0, "GetAtomNameA should fail\n"); ok(GetLastError() == ERROR_INVALID_HANDLE, "err %d\n", GetLastError()); todo_wine { lstrcpyA(buf, "foo"); SetLastError(0xdeadbeef); len = GlobalGetAtomNameA((ATOM)format_id, buf, 256); ok(len == 0, "GlobalGetAtomNameA should fail\n"); ok(GetLastError() == ERROR_INVALID_HANDLE, "err %d\n", GetLastError()); } SetLastError(0xdeadbeef); atom_id = FindAtomA("my_cool_clipboard_format"); ok(atom_id == 0, "FindAtomA should fail\n"); ok(GetLastError() == ERROR_FILE_NOT_FOUND, "err %d\n", GetLastError()); if (0) { /* this relies on the clipboard and global atom table being different */ SetLastError(0xdeadbeef); atom_id = GlobalFindAtomA("my_cool_clipboard_format"); ok(atom_id == 0, "GlobalFindAtomA should fail\n"); ok(GetLastError() == ERROR_FILE_NOT_FOUND, "err %d\n", GetLastError()); } for (format_id = 0; format_id < 0xffff; format_id++) { SetLastError(0xdeadbeef); len = GetClipboardFormatNameA(format_id, buf, 256); if (format_id < 0xc000) ok(!len, "GetClipboardFormatNameA should fail, but it returned %d (%s)\n", len, buf); else if (len && winetest_debug > 1) trace("%04x: %s\n", format_id, len ? buf : ""); } ret = OpenClipboard(0); ok( ret, "OpenClipboard error %d\n", GetLastError()); /* try some invalid/unregistered formats */ SetLastError( 0xdeadbeef ); handle = SetClipboardData( 0, GlobalAlloc( GMEM_DDESHARE | GMEM_MOVEABLE, 1 )); ok( !handle, "SetClipboardData succeeded\n" ); ok( GetLastError() == ERROR_CLIPBOARD_NOT_OPEN, "wrong error %u\n", GetLastError()); handle = SetClipboardData( 0x1234, GlobalAlloc( GMEM_DDESHARE | GMEM_MOVEABLE, 1 )); ok( handle != 0, "SetClipboardData failed err %d\n", GetLastError()); handle = SetClipboardData( 0x123456, GlobalAlloc( GMEM_DDESHARE | GMEM_MOVEABLE, 1 )); ok( handle != 0, "SetClipboardData failed err %d\n", GetLastError()); handle = SetClipboardData( 0xffff8765, GlobalAlloc( GMEM_DDESHARE | GMEM_MOVEABLE, 1 )); ok( handle != 0, "SetClipboardData failed err %d\n", GetLastError()); ok( IsClipboardFormatAvailable( 0x1234 ), "format missing\n" ); ok( IsClipboardFormatAvailable( 0x123456 ), "format missing\n" ); ok( IsClipboardFormatAvailable( 0xffff8765 ), "format missing\n" ); ok( !IsClipboardFormatAvailable( 0 ), "format available\n" ); ok( !IsClipboardFormatAvailable( 0x3456 ), "format available\n" ); ok( !IsClipboardFormatAvailable( 0x8765 ), "format available\n" ); trace("# of formats available: %d\n", CountClipboardFormats()); format_id = 0; while ((format_id = EnumClipboardFormats(format_id))) { ok(IsClipboardFormatAvailable(format_id), "format %04x was listed as available\n", format_id); len = GetClipboardFormatNameA(format_id, buf, 256); trace("%04x: %s\n", format_id, len ? buf : ""); } ret = EmptyClipboard(); ok( ret, "EmptyClipboard error %d\n", GetLastError()); ret =CloseClipboard(); ok( ret, "CloseClipboard error %d\n", GetLastError()); if (CountClipboardFormats()) { SetLastError(0xdeadbeef); ok(!EnumClipboardFormats(0), "EnumClipboardFormats should fail if clipboard wasn't open\n"); ok(GetLastError() == ERROR_CLIPBOARD_NOT_OPEN, "Last error should be set to ERROR_CLIPBOARD_NOT_OPEN, not %d\n", GetLastError()); } SetLastError(0xdeadbeef); ok(!EmptyClipboard(), "EmptyClipboard should fail if clipboard wasn't open\n"); ok(GetLastError() == ERROR_CLIPBOARD_NOT_OPEN || broken(GetLastError() == 0xdeadbeef), /* wow64 */ "Wrong error %u\n", GetLastError()); format_id = RegisterClipboardFormatA("#1234"); ok(format_id == 1234, "invalid clipboard format id %04x\n", format_id); }
bool ServiceManager::StopService(LPCSTR p_serviceID) { ATOM serviceID = FindAtomA(p_serviceID); TRACE("Stopping %s", p_serviceID); return m_serviceList.end() != std::find_if(m_serviceList.begin(), m_serviceList.end(), std::bind2nd(std::mem_fun(&Service::Stop), serviceID)); }
static void test_RegisterClipboardFormatA(void) { ATOM atom_id; UINT format_id, format_id2; char buf[256]; int len; BOOL ret; format_id = RegisterClipboardFormatA("my_cool_clipboard_format"); ok(format_id > 0xc000 && format_id < 0xffff, "invalid clipboard format id %04x\n", format_id); format_id2 = RegisterClipboardFormatA("MY_COOL_CLIPBOARD_FORMAT"); ok(format_id2 == format_id, "invalid clipboard format id %04x\n", format_id2); len = GetClipboardFormatNameA(format_id, buf, 256); ok(len == lstrlenA("my_cool_clipboard_format"), "wrong format name length %d\n", len); ok(!lstrcmpA(buf, "my_cool_clipboard_format"), "wrong format name \"%s\"\n", buf); lstrcpyA(buf, "foo"); SetLastError(0xdeadbeef); len = GetAtomNameA((ATOM)format_id, buf, 256); ok(len == 0, "GetAtomNameA should fail\n"); test_last_error(ERROR_INVALID_HANDLE); todo_wine { lstrcpyA(buf, "foo"); SetLastError(0xdeadbeef); len = GlobalGetAtomNameA((ATOM)format_id, buf, 256); ok(len == 0, "GlobalGetAtomNameA should fail\n"); test_last_error(ERROR_INVALID_HANDLE); } SetLastError(0xdeadbeef); atom_id = FindAtomA("my_cool_clipboard_format"); ok(atom_id == 0, "FindAtomA should fail\n"); test_last_error(ERROR_FILE_NOT_FOUND); if (0) { /* this relies on the clipboard and global atom table being different */ SetLastError(0xdeadbeef); atom_id = GlobalFindAtomA("my_cool_clipboard_format"); ok(atom_id == 0, "GlobalFindAtomA should fail\n"); test_last_error(ERROR_FILE_NOT_FOUND); for (format_id = 0; format_id < 0xffff; format_id++) { SetLastError(0xdeadbeef); len = GetClipboardFormatNameA(format_id, buf, 256); if (format_id < 0xc000) { ok(!len, "GetClipboardFormatNameA should fail, but it returned %d (%s)\n", len, buf); test_last_error(ERROR_INVALID_PARAMETER); } else { if (len) trace("%04x: %s\n", format_id, len ? buf : ""); else test_last_error(ERROR_INVALID_HANDLE); } } } ret = OpenClipboard(0); ok( ret, "OpenClipboard error %d\n", GetLastError()); trace("# of formats available: %d\n", CountClipboardFormats()); format_id = 0; while ((format_id = EnumClipboardFormats(format_id))) { ok(IsClipboardFormatAvailable(format_id), "format %04x was listed as available\n", format_id); len = GetClipboardFormatNameA(format_id, buf, 256); trace("%04x: %s\n", format_id, len ? buf : ""); } ret = EmptyClipboard(); ok( ret, "EmptyClipboard error %d\n", GetLastError()); ret =CloseClipboard(); ok( ret, "CloseClipboard error %d\n", GetLastError()); if (CountClipboardFormats()) { SetLastError(0xdeadbeef); ok(!EnumClipboardFormats(0), "EnumClipboardFormats should fail if clipboard wasn't open\n"); ok(GetLastError() == ERROR_CLIPBOARD_NOT_OPEN, "Last error should be set to ERROR_CLIPBOARD_NOT_OPEN, not %d\n", GetLastError()); } SetLastError(0xdeadbeef); ok(!EmptyClipboard(), "EmptyClipboard should fail if clipboard wasn't open\n"); ok(GetLastError() == ERROR_CLIPBOARD_NOT_OPEN || broken(GetLastError() == 0xdeadbeef), /* wow64 */ "Wrong error %u\n", GetLastError()); }