{"record":{"id":"836a624102d99f7c","repo":"dotnet/wpf","slug":"document-does-not-contain-any-rights-management-protected","errorCode":null,"errorMessage":"Document does not contain any rights management-protected streams.","messagePattern":"Document does not contain any rights management-protected streams\\.","errorType":"exception","errorClass":"FileFormatException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/WindowsBase/System/IO/Packaging/EncryptedPackage.cs","lineNumber":908,"sourceCode":"\n            foreach (IDataTransform dataTransform in transforms)\n            {\n                if (dataTransform.TransformIdentifier is string id &&\n                    string.Equals(id, RightsManagementEncryptionTransform.ClassTransformIdentifier, StringComparison.OrdinalIgnoreCase))\n                {\n                    // Do not allow more than one RM Transform\n                    if (rmet != null)\n                    {\n                        throw new FileFormatException(SR.MultipleRightsManagementEncryptionTransformFound);\n                    }\n\n                    rmet = dataTransform as RightsManagementEncryptionTransform;\n                }\n            }\n\n            if (rmet == null)\n            {\n                throw new FileFormatException(SR.RightsManagementEncryptionTransformNotFound);\n            }\n\n            //\n            //  There is no reason to further push initialization of the Rights Management \n            //  data (parsing publish / use license). It will add unnecessary costs to the \n            //  scenarios where RM license are not relevant, for example indexing and \n            //  working with document properties            \n            //\n            \n            //\n            // Make the rights management information stored in the compound file\n            // available to the application through the RightsManagementInformation\n            // property.\n            //\n            _rmi = new RightsManagementInformation(rmet);\n        }\n\n        /// <summary>","sourceCodeStart":890,"sourceCodeEnd":926,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/WindowsBase/System/IO/Packaging/EncryptedPackage.cs#L890-L926","documentation":"After scanning all transforms in the data space, no RightsManagementEncryptionTransform was found, meaning the document has no RM-protected streams. Open of an EncryptedPackageEnvelope requires at least one, so FileFormatException is thrown.","triggerScenarios":"EncryptedPackageEnvelope.Open on a compound file that contains a package stream but whose DataSpaceManager has no transform matching the RM class identifier — e.g. a plain (unprotected) XPS/package stored in a compound file, or a file whose transform entries were stripped.","commonSituations":"Opening a normal OPC/XPS package in compound-file form with the RM-aware Open API; opening a file whose encryption transform was removed by another tool; wrong API chosen for unprotected documents.","solutions":["Open unprotected packages with Package.Open / OpfXpsHelper instead of EncryptedPackageEnvelope.Open","Check for the RM transform (e.g. via GetDataSpaceManager) before attempting RM-specific open","If the file should be protected, re-protect it by creating a new EncryptedPackageEnvelope from the plain package"],"exampleFix":"// before\nvar env = EncryptedPackageEnvelope.Open(path); // throws if not RM-protected\n// after\nif (IsRightsManaged(path)) { var env = EncryptedPackageEnvelope.Open(path); }\nelse { var pkg = Package.Open(path); }","handlingStrategy":"validation","validationCode":"var dsm = StorageInfo.Open(path).GetDataSpaceManager();\nbool hasRm = dsm.GetDataTransforms().Any(t => string.Equals(t.TransformIdentifier, RightsManagementEncryptionTransform.ClassTransformIdentifier, StringComparison.OrdinalIgnoreCase));\nif (!hasRm) { /* open as plain package instead */ }","typeGuard":null,"tryCatchPattern":"try { var env = EncryptedPackageEnvelope.Open(path); }\ncatch (FileFormatException) { var pkg = Package.Open(path); /* unprotected path */ }","preventionTips":["Check for the RM transform before choosing the RM open API","Use Package.Open for unprotected packages","Re-protect plain packages via EncryptedPackageEnvelope.Create when RM is required"],"tags":["wpf","packaging","file-format","rights-management"],"backgroundTag":"resource-not-found","analyzedSha":"81131a70a4c573cd62748a5c36908fc4d662daa9","analyzedAt":"2026-09-14T10:12:48.479Z","contentChangedAt":"2026-09-14T10:12:48.479Z","schemaVersion":2},"datasetVersion":"2026-09-21T21:30:21.729Z"}