Ejemplo n.º 1
0
        static bool GetOwnerAuthFromOS(out byte[] ownerAuth)
        {
            ownerAuth = new byte[0];

            // open context
            TbsWrapper.TBS_CONTEXT_PARAMS contextParams;
            UIntPtr tbsContext = UIntPtr.Zero;

            contextParams.Version = TbsWrapper.TBS_CONTEXT_VERSION.TWO;
            contextParams.Flags   = TbsWrapper.TBS_CONTEXT_CREATE_FLAGS.IncludeTpm20;
            TbsWrapper.TBS_RESULT result = TbsWrapper.NativeMethods.Tbsi_Context_Create(ref contextParams, ref tbsContext);

            if (result != TbsWrapper.TBS_RESULT.TBS_SUCCESS)
            {
                return(false);
            }
            if (tbsContext == UIntPtr.Zero)
            {
                return(false);
            }

            // get owner auth size
            uint ownerAuthSize = 0;

            TbsWrapper.TBS_OWNERAUTH_TYPE ownerType = TbsWrapper.TBS_OWNERAUTH_TYPE.TBS_OWNERAUTH_TYPE_STORAGE_20;
            result = TbsWrapper.NativeMethods.Tbsi_Get_OwnerAuth(tbsContext, ownerType, ownerAuth, ref ownerAuthSize);
            if (result != TbsWrapper.TBS_RESULT.TBS_SUCCESS &&
                result != TbsWrapper.TBS_RESULT.TBS_E_INSUFFICIENT_BUFFER)
            {
                ownerType = TbsWrapper.TBS_OWNERAUTH_TYPE.TBS_OWNERAUTH_TYPE_FULL;
                result    = TbsWrapper.NativeMethods.Tbsi_Get_OwnerAuth(tbsContext, ownerType, ownerAuth, ref ownerAuthSize);
                if (result != TbsWrapper.TBS_RESULT.TBS_SUCCESS &&
                    result != TbsWrapper.TBS_RESULT.TBS_E_INSUFFICIENT_BUFFER)
                {
                    Console.WriteLine(Globs.GetResourceString("Failed to get ownerAuth."));
                    return(false);
                }
            }
            // get owner auth itself
            ownerAuth = new byte[ownerAuthSize];
            result    = TbsWrapper.NativeMethods.Tbsi_Get_OwnerAuth(tbsContext, ownerType, ownerAuth, ref ownerAuthSize);
            if (result != TbsWrapper.TBS_RESULT.TBS_SUCCESS)
            {
                Console.WriteLine(Globs.GetResourceString("Failed to get ownerAuth."));
                return(false);
            }

            TbsWrapper.NativeMethods.Tbsip_Context_Close(tbsContext);

            return(true);
        }