2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * FILE: dll/win32/kernel32/misc/actctx.c
5 * PURPOSE: Comm functions
6 * PROGRAMMERS: Jacek Caban for CodeWeavers
9 * Dmitry Chapyshev (dmitry@reactos.org)
17 #define ACTCTX_FLAGS_ALL (\
18 ACTCTX_FLAG_PROCESSOR_ARCHITECTURE_VALID |\
19 ACTCTX_FLAG_LANGID_VALID |\
20 ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID |\
21 ACTCTX_FLAG_RESOURCE_NAME_VALID |\
22 ACTCTX_FLAG_SET_PROCESS_DEFAULT |\
23 ACTCTX_FLAG_APPLICATION_NAME_VALID |\
24 ACTCTX_FLAG_SOURCE_IS_ASSEMBLYREF |\
25 ACTCTX_FLAG_HMODULE_VALID )
27 #define ACTCTX_FAKE_HANDLE ((HANDLE) 0xf00baa)
28 #define ACTCTX_FAKE_COOKIE ((ULONG_PTR) 0xf00bad)
35 FindActCtxSectionStringA(
37 const GUID
*lpExtensionGuid
,
39 LPCSTR lpStringToFind
,
40 PACTCTX_SECTION_KEYED_DATA ReturnedData
44 LPWSTR lpStringToFindW
= NULL
;
46 /* Convert lpStringToFind */
49 BasepAnsiStringToHeapUnicodeString(lpStringToFind
,
50 (LPWSTR
*) &lpStringToFindW
);
53 /* Call the Unicode function */
54 bRetVal
= FindActCtxSectionStringW(dwFlags
,
62 RtlFreeHeap(GetProcessHeap(), 0, (LPWSTR
*) lpStringToFindW
);
80 ZeroMemory(&pActCtxW
, sizeof(ACTCTXW
));
81 pActCtxW
.cbSize
= sizeof(ACTCTXW
);
82 pActCtxW
.dwFlags
= pActCtx
->dwFlags
;
83 pActCtxW
.wLangId
= pActCtx
->wLangId
;
84 pActCtxW
.hModule
= pActCtx
->hModule
;
85 pActCtxW
.wProcessorArchitecture
= pActCtx
->wProcessorArchitecture
;
87 pActCtxW
.hModule
= pActCtx
->hModule
;
89 /* Convert ActCtx Strings */
90 if (pActCtx
->lpSource
)
92 BasepAnsiStringToHeapUnicodeString(pActCtx
->lpSource
,
93 (LPWSTR
*) &pActCtxW
.lpSource
);
95 if (pActCtx
->lpAssemblyDirectory
)
97 BasepAnsiStringToHeapUnicodeString(pActCtx
->lpAssemblyDirectory
,
98 (LPWSTR
*) &pActCtxW
.lpAssemblyDirectory
);
100 if (HIWORD(pActCtx
->lpResourceName
))
102 BasepAnsiStringToHeapUnicodeString(pActCtx
->lpResourceName
,
103 (LPWSTR
*) &pActCtxW
.lpResourceName
);
107 pActCtxW
.lpResourceName
= (LPWSTR
) pActCtx
->lpResourceName
;
109 if (pActCtx
->lpApplicationName
)
111 BasepAnsiStringToHeapUnicodeString(pActCtx
->lpApplicationName
,
112 (LPWSTR
*) &pActCtxW
.lpApplicationName
);
114 /* Call the Unicode function */
115 hRetVal
= CreateActCtxW(&pActCtxW
);
118 RtlFreeHeap(GetProcessHeap(), 0, (LPWSTR
*) pActCtxW
.lpSource
);
119 RtlFreeHeap(GetProcessHeap(), 0, (LPWSTR
*) pActCtxW
.lpAssemblyDirectory
);
120 if (HIWORD(pActCtx
->lpResourceName
))
121 RtlFreeHeap(GetProcessHeap(), 0, (LPWSTR
*) pActCtxW
.lpResourceName
);
122 RtlFreeHeap(GetProcessHeap(), 0, (LPWSTR
*) pActCtxW
.lpApplicationName
);
139 DPRINT("ActivateActCtx(%p %p)\n", hActCtx
, ulCookie
);
141 Status
= RtlActivateActivationContext(0, hActCtx
, ulCookie
);
142 if (!NT_SUCCESS(Status
))
144 SetLastError(RtlNtStatusToDosError(Status
));
159 DPRINT("AddRefActCtx(%p)\n", hActCtx
);
160 RtlAddRefActivationContext(hActCtx
);
175 DPRINT("CreateActCtxW(%p %08lx)\n", pActCtx
, pActCtx
? pActCtx
->dwFlags
: 0);
177 Status
= RtlCreateActivationContext(&hActCtx
, (PVOID
*)&pActCtx
);
178 if (!NT_SUCCESS(Status
))
180 SetLastError(RtlNtStatusToDosError(Status
));
181 return INVALID_HANDLE_VALUE
;
198 DPRINT("DeactivateActCtx(%08lx %08lx)\n", dwFlags
, ulCookie
);
199 Status
= RtlDeactivateActivationContext(dwFlags
, ulCookie
);
201 if (!NT_SUCCESS(Status
)) return FALSE
;
211 FindActCtxSectionGuid(
213 const GUID
*lpExtensionGuid
,
215 const GUID
*lpGuidToFind
,
216 PACTCTX_SECTION_KEYED_DATA ReturnedData
219 DPRINT("%s() is UNIMPLEMENTED!\n", __FUNCTION__
);
228 FindActCtxSectionStringW(
230 const GUID
*lpExtensionGuid
,
232 LPCWSTR lpStringToFind
,
233 PACTCTX_SECTION_KEYED_DATA ReturnedData
239 RtlInitUnicodeString(&us
, lpStringToFind
);
240 Status
= RtlFindActivationContextSectionString(dwFlags
, lpExtensionGuid
, ulSectionId
, &us
, ReturnedData
);
241 if (!NT_SUCCESS(Status
))
243 SetLastError(RtlNtStatusToDosError(Status
));
259 DPRINT("GetCurrentActCtx(%p)\n", phActCtx
);
260 Status
= RtlGetActiveActivationContext(phActCtx
);
261 if (!NT_SUCCESS(Status
))
263 SetLastError(RtlNtStatusToDosError(Status
));
280 SIZE_T cbBuffer OPTIONAL
,
281 SIZE_T
*pcbWrittenOrRequired OPTIONAL
284 DPRINT("%s() is UNIMPLEMENTED!\n", __FUNCTION__
);
285 /* this makes Adobe Photoshop 7.0 happy */
286 SetLastError( ERROR_CALL_NOT_IMPLEMENTED
);
299 DPRINT("ReleaseActCtx(%p)\n", hActCtx
);
300 RtlReleaseActivationContext(hActCtx
);
313 DPRINT("ZombifyActCtx(%p)\n", hActCtx
);
315 Status
= RtlZombifyActivationContext(hActCtx
);
316 if (!NT_SUCCESS(Status
))
318 SetLastError(RtlNtStatusToDosError(Status
));