static private Nullable <ContentRight> GetRightFromHandle(SafeRightsManagementPubHandle rightHandle, out DateTime validFrom, out DateTime validUntil) { uint rightNameLength = 0; StringBuilder rightName; int hr = SafeNativeMethods.DRMGetRightInfo(rightHandle, ref rightNameLength, null, null, null); Errors.ThrowOnErrorCode(hr); rightName = new StringBuilder(checked ((int)rightNameLength)); SystemTime validFromSysTime = new SystemTime(DateTime.Now); SystemTime validUntilSysTime = new SystemTime(DateTime.Now); hr = SafeNativeMethods.DRMGetRightInfo(rightHandle, ref rightNameLength, rightName, validFromSysTime, validUntilSysTime); Errors.ThrowOnErrorCode(hr); validFrom = validFromSysTime.GetDateTime(DateTime.MinValue); validUntil = validUntilSysTime.GetDateTime(DateTime.MaxValue); return(ClientSession.GetRightFromString(rightName.ToString())); }
private void GetIssuanceLicenseInfo( out DateTime timeFrom, out DateTime timeUntil, DistributionPointInfo distributionPointInfo, out string distributionPointName, out string distributionPointUri, out ContentUser owner, out bool officialFlag) { uint distributionPointNameLength = 0; uint distributionPointUriLength = 0; bool officialFlagTemp = false; SafeRightsManagementPubHandle ownerHandleTemp = null; int hr = SafeNativeMethods.DRMGetIssuanceLicenseInfo( _issuanceLicenseHandle, null, null, (uint)distributionPointInfo, ref distributionPointNameLength, null, ref distributionPointUriLength, null, out ownerHandleTemp, out officialFlagTemp); Errors.ThrowOnErrorCode(hr); if (ownerHandleTemp != null) { // As a result of calling DRMGetIssuanceLicenseInfo twice, // we are getting 2 handles. We are going to dispose the first one // and preserve the second one. ownerHandleTemp.Dispose(); ownerHandleTemp = null; } StringBuilder distributionPointNameTemp = null; // allocate memory as necessary, it seems that Unmanaged libraries really do not like // getting a non null buffer of size 0 if (distributionPointNameLength > 0) { distributionPointNameTemp = new StringBuilder(checked ((int)distributionPointNameLength)); } StringBuilder distributionPointUriTemp = null; // allocate memory as necessary, it seems that Unmanaged libraries really do not like // getting a non null buffer of size 0 if (distributionPointUriLength > 0) { distributionPointUriTemp = new StringBuilder(checked ((int)distributionPointUriLength)); } SystemTime timeFromTemp = new SystemTime(DateTime.Now); SystemTime timeUntilTemp = new SystemTime(DateTime.Now); hr = SafeNativeMethods.DRMGetIssuanceLicenseInfo( _issuanceLicenseHandle, timeFromTemp, timeUntilTemp, (uint)distributionPointInfo, ref distributionPointNameLength, distributionPointNameTemp, ref distributionPointUriLength, distributionPointUriTemp, out ownerHandleTemp, out officialFlagTemp); Errors.ThrowOnErrorCode(hr); timeFrom = timeFromTemp.GetDateTime(DateTime.MinValue); timeUntil = timeUntilTemp.GetDateTime(DateTime.MaxValue); // only if we got some data back we shall try to process it if (distributionPointNameTemp != null) { distributionPointName = distributionPointNameTemp.ToString(); } else { distributionPointName = null; } // only if we got some data back we shall try to process it if (distributionPointUriTemp != null) { distributionPointUri = distributionPointUriTemp.ToString(); } else { distributionPointUri = null; } // if we have owner let's convert it to a user and preserve // handler for further destruction owner = null; if (ownerHandleTemp != null) { _pubHandlesList.Add(ownerHandleTemp); if (!ownerHandleTemp.IsInvalid) { owner = GetUserFromHandle(ownerHandleTemp); } } officialFlag = officialFlagTemp; }
private void GetIssuanceLicenseInfo( out DateTime timeFrom, out DateTime timeUntil, DistributionPointInfo distributionPointInfo, out string distributionPointName, out string distributionPointUri, out ContentUser owner, out bool officialFlag) { uint distributionPointNameLength = 0; uint distributionPointUriLength = 0; bool officialFlagTemp = false; SafeRightsManagementPubHandle ownerHandleTemp = null; int hr = SafeNativeMethods.DRMGetIssuanceLicenseInfo( _issuanceLicenseHandle, null, null, (uint)distributionPointInfo, ref distributionPointNameLength, null, ref distributionPointUriLength, null, out ownerHandleTemp, out officialFlagTemp); Errors.ThrowOnErrorCode(hr); if (ownerHandleTemp != null) { // As a result of calling DRMGetIssuanceLicenseInfo twice, // we are getting 2 handles. We are going to dispose the first one // and preserve the second one. ownerHandleTemp.Dispose(); ownerHandleTemp = null; } StringBuilder distributionPointNameTemp = null; // allocate memory as necessary, it seems that Unmanaged libraries really do not like // getting a non null buffer of size 0 if (distributionPointNameLength > 0) { distributionPointNameTemp = new StringBuilder(checked((int)distributionPointNameLength)); } StringBuilder distributionPointUriTemp = null; // allocate memory as necessary, it seems that Unmanaged libraries really do not like // getting a non null buffer of size 0 if (distributionPointUriLength > 0) { distributionPointUriTemp = new StringBuilder(checked((int)distributionPointUriLength)); } SystemTime timeFromTemp = new SystemTime(DateTime.Now); SystemTime timeUntilTemp = new SystemTime(DateTime.Now); hr = SafeNativeMethods.DRMGetIssuanceLicenseInfo( _issuanceLicenseHandle, timeFromTemp, timeUntilTemp, (uint)distributionPointInfo, ref distributionPointNameLength, distributionPointNameTemp, ref distributionPointUriLength, distributionPointUriTemp, out ownerHandleTemp, out officialFlagTemp); Errors.ThrowOnErrorCode(hr); timeFrom = timeFromTemp.GetDateTime(DateTime.MinValue); timeUntil = timeUntilTemp.GetDateTime(DateTime.MaxValue); // only if we got some data back we shall try to process it if (distributionPointNameTemp != null) { distributionPointName = distributionPointNameTemp.ToString(); } else { distributionPointName = null; } // only if we got some data back we shall try to process it if (distributionPointUriTemp != null) { distributionPointUri = distributionPointUriTemp.ToString(); } else { distributionPointUri = null; } // if we have owner let's convert it to a user and preserve // handler for further destruction owner = null; if (ownerHandleTemp != null) { _pubHandlesList.Add(ownerHandleTemp); if (!ownerHandleTemp.IsInvalid) { owner = GetUserFromHandle(ownerHandleTemp); } } officialFlag = officialFlagTemp; }
// This method has only one caller GetGrantsFromBoundUseLicense(), which is // in the #if DEBUG static private DateTime GetBoundLicenseDateTimeAttribute( SafeRightsManagementHandle queryHandle, string attributeType, uint attributeIndex, DateTime defaultValue) { uint attributeSize = SystemTime.Size; byte[] dataBuffer = new byte[attributeSize]; uint encodingType; int hr = SafeNativeMethods.DRMGetBoundLicenseAttribute( queryHandle, attributeType, attributeIndex, out encodingType, ref attributeSize, dataBuffer); if (encodingType != (uint)LicenseAttributeEncoding.Time) { throw new RightsManagementException(RightsManagementFailureCode.InvalidLicense); } if ((hr == (int)RightsManagementFailureCode.NoMoreData) || (hr == (int)RightsManagementFailureCode.QueryReportsNoResults)) { return defaultValue; } Errors.ThrowOnErrorCode(hr); Debug.Assert(attributeSize == SystemTime.Size); // if isn't true it is an indication of a problem in the underlying libraries SystemTime sysTime = new SystemTime(dataBuffer); return sysTime.GetDateTime(defaultValue); }
static private Nullable<ContentRight> GetRightFromHandle(SafeRightsManagementPubHandle rightHandle, out DateTime validFrom, out DateTime validUntil) { uint rightNameLength = 0; StringBuilder rightName; int hr = SafeNativeMethods.DRMGetRightInfo(rightHandle, ref rightNameLength, null, null, null); Errors.ThrowOnErrorCode(hr); rightName = new StringBuilder(checked((int)rightNameLength)); SystemTime validFromSysTime = new SystemTime(DateTime.Now); SystemTime validUntilSysTime = new SystemTime(DateTime.Now); hr = SafeNativeMethods.DRMGetRightInfo(rightHandle, ref rightNameLength, rightName, validFromSysTime, validUntilSysTime); Errors.ThrowOnErrorCode(hr); validFrom = validFromSysTime.GetDateTime(DateTime.MinValue); validUntil = validUntilSysTime.GetDateTime(DateTime.MaxValue); return ClientSession.GetRightFromString(rightName.ToString()); }