Eric Pouech : ntdll: Implemented FileInformationInAssemblyOfAssemblyInActivationContext option in RtlQueryInformationActivationContext .

Alexandre Julliard julliard at wine.codeweavers.com
Thu Jul 26 06:36:46 CDT 2007


Module: wine
Branch: master
Commit: e590499c7a1b5fc5128d6c12be9f75dbd595a0f8
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e590499c7a1b5fc5128d6c12be9f75dbd595a0f8

Author: Eric Pouech <eric.pouech at wanadoo.fr>
Date:   Wed Jul 25 19:04:36 2007 +0200

ntdll: Implemented FileInformationInAssemblyOfAssemblyInActivationContext option in RtlQueryInformationActivationContext.

---

 dlls/ntdll/actctx.c |   41 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 41 insertions(+), 0 deletions(-)

diff --git a/dlls/ntdll/actctx.c b/dlls/ntdll/actctx.c
index 7eda748..14336c0 100644
--- a/dlls/ntdll/actctx.c
+++ b/dlls/ntdll/actctx.c
@@ -2387,6 +2387,47 @@ NTSTATUS WINAPI RtlQueryInformationActivationContext( ULONG flags, HANDLE handle
         break;
 
     case FileInformationInAssemblyOfAssemblyInActivationContext:
+        {
+            const ACTIVATION_CONTEXT_QUERY_INDEX *acqi = subinst;
+            ASSEMBLY_FILE_DETAILED_INFORMATION *afdi = buffer;
+            struct assembly *assembly;
+            struct dll_redirect *dll;
+            SIZE_T len, dll_len = 0;
+            LPWSTR ptr;
+
+            if (!(actctx = check_actctx(handle))) return STATUS_INVALID_PARAMETER;
+            if (!acqi) return STATUS_INVALID_PARAMETER;
+
+            if (acqi->ulAssemblyIndex >= actctx->num_assemblies)
+                return STATUS_INVALID_PARAMETER;
+            assembly = &actctx->assemblies[acqi->ulAssemblyIndex];
+
+            if (acqi->ulFileIndexInAssembly >= assembly->num_dlls)
+                return STATUS_INVALID_PARAMETER;
+            dll = &assembly->dlls[acqi->ulFileIndexInAssembly];
+
+            if (dll->name) dll_len = strlenW(dll->name) + 1;
+            len = sizeof(*afdi) + dll_len * sizeof(WCHAR);
+
+            if (!buffer || bufsize < len)
+            {
+                if (retlen) *retlen = len;
+                return STATUS_BUFFER_TOO_SMALL;
+            }
+            if (retlen) *retlen = 0; /* yes that's what native does !! */
+            afdi->ulFlags = ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION;
+            afdi->ulFilenameLength = dll_len ? (dll_len - 1) * sizeof(WCHAR) : 0;
+            afdi->ulPathLength = 0; /* FIXME */
+            ptr = (LPWSTR)(afdi + 1);
+            if (dll_len)
+            {
+                afdi->lpFileName = ptr;
+                memcpy( ptr, dll->name, dll_len * sizeof(WCHAR) );
+            } else afdi->lpFileName = NULL;
+            afdi->lpFilePath = NULL; /* FIXME */
+        }
+        break;
+
     default:
         FIXME( "class %u not implemented\n", class );
         return STATUS_NOT_IMPLEMENTED;




More information about the wine-cvs mailing list