| Previous | Next |
| STATUS_GENERIC_NOT_MAPPED | STATUS_INVALID_USER_BUFFER |
STATUS_BAD_DESCRIPTOR_FORMAT
The descriptor layout does not match the receiving contract
An absolute descriptor stores pointers to owner, group, DACL, and SACL structures, while a self-relative descriptor stores offsets within one contiguous buffer. Persistence and transport normally use self-relative form; many editing APIs operate on absolute form. Passing one where the other is required makes valid-looking fields unsafe to interpret.
Record the control flags and total buffer length, then validate every offset or pointer before conversion. A descriptor copied from an untrusted buffer must also pass structural validation; changing only the SE_SELF_RELATIVE flag does not convert the underlying layout.
What to inspect
- Inspect SECURITY_DESCRIPTOR_CONTROL and the SE_SELF_RELATIVE flag.
- Validate owner, group, DACL, and SACL locations against the buffer bounds.
- Use documented conversion functions instead of toggling the format bit manually.
References
- Microsoft: Security descriptors
- Microsoft: Absolute and self-relative security descriptors
- Microsoft Open Specifications: NTSTATUS values
Looking for a different code? Search another status or error code.