예제 #1
0
 internal static extern bool AuthzGetInformationFromContext(
     SafeAuthZClientContextHandle hAuthzClientContext,
     AUTHZ_CONTEXT_INFORMATION_CLASS InfoClass,
     int BufferSize,
     out int pSizeRequired,
     SafeBuffer Buffer
     );
예제 #2
0
        private NtResult <SafeStructureInOutBuffer <T> > QueryBuffer <T>(AUTHZ_CONTEXT_INFORMATION_CLASS info_class, bool throw_on_error) where T : new()
        {
            if (SecurityNativeMethods.AuthzGetInformationFromContext(_handle, info_class, 0, out int required_size, SafeHGlobalBuffer.Null))
            {
                return(NtStatus.STATUS_INVALID_PARAMETER.CreateResultFromError <SafeStructureInOutBuffer <T> >(throw_on_error));
            }

            var err = Win32Utils.GetLastWin32Error();

            if (err != Win32Error.ERROR_INSUFFICIENT_BUFFER)
            {
                return(err.CreateResultFromDosError <SafeStructureInOutBuffer <T> >(throw_on_error));
            }

            using (var buffer = new SafeStructureInOutBuffer <T>(required_size, false)) {
                return(SecurityNativeMethods.AuthzGetInformationFromContext(_handle, info_class,
                                                                            buffer.Length, out required_size, buffer).CreateWin32Result(throw_on_error, () => buffer.Detach()));
            }
        }
예제 #3
0
        public static SafeHGlobalHandle GetCtxInfo(SafeAUTHZ_CLIENT_CONTEXT_HANDLE hCtx, AUTHZ_CONTEXT_INFORMATION_CLASS type)
        {
            var b = AuthzGetInformationFromContext(hCtx, type, 0, out var szReq, IntPtr.Zero);

            if (!b && Win32Error.GetLastError() != Win32Error.ERROR_INSUFFICIENT_BUFFER)
            {
                TestContext.WriteLine($"AuthzGetInformationFromContext:{Win32Error.GetLastError()}");
            }
            Assert.That(!b);
            if (szReq == 0)
            {
                return(SafeHGlobalHandle.Null);
            }
            var buf = new SafeHGlobalHandle((int)szReq);

            b = AuthzGetInformationFromContext(hCtx, type, szReq, out szReq, (IntPtr)buf);
            if (!b)
            {
                TestContext.WriteLine($"AuthzGetInformationFromContext:{Win32Error.GetLastError()}");
            }
            Assert.That(b);
            return(buf);
        }
예제 #4
0
 internal static extern bool AuthzModifySids(
     SafeAuthZClientContextHandle hAuthzClientContext,
     AUTHZ_CONTEXT_INFORMATION_CLASS SidClass,
     AuthZSidOperation[] pSidOperations,
     SafeTokenGroupsBuffer pSids
     );