mirror of
https://github.com/decompals/wibo.git
synced 2025-10-16 15:15:10 +00:00
46 lines
1.6 KiB
C++
46 lines
1.6 KiB
C++
#include "access.h"
|
|
|
|
namespace wibo::access {
|
|
|
|
const GenericMapping kFileGenericMapping{FILE_GENERIC_READ, FILE_GENERIC_WRITE, FILE_GENERIC_EXECUTE, FILE_ALL_ACCESS};
|
|
|
|
const GenericMapping kDirectoryGenericMapping{
|
|
STANDARD_RIGHTS_READ | FILE_LIST_DIRECTORY | FILE_READ_ATTRIBUTES | FILE_READ_EA | FILE_TRAVERSE | SYNCHRONIZE,
|
|
STANDARD_RIGHTS_WRITE | FILE_ADD_FILE | FILE_ADD_SUBDIRECTORY | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | SYNCHRONIZE,
|
|
STANDARD_RIGHTS_EXECUTE | FILE_TRAVERSE | FILE_READ_ATTRIBUTES | SYNCHRONIZE,
|
|
FILE_ALL_ACCESS | FILE_ADD_FILE | FILE_ADD_SUBDIRECTORY | FILE_TRAVERSE | FILE_DELETE_CHILD};
|
|
|
|
uint32_t mapGenericMask(uint32_t desiredMask, const GenericMapping &mapping) {
|
|
uint32_t mask = desiredMask;
|
|
if ((mask & GENERIC_ALL) != 0) {
|
|
mask = (mask & ~GENERIC_ALL) | mapping.genericAll;
|
|
}
|
|
if ((mask & GENERIC_READ) != 0) {
|
|
mask = (mask & ~GENERIC_READ) | mapping.genericRead;
|
|
}
|
|
if ((mask & GENERIC_WRITE) != 0) {
|
|
mask = (mask & ~GENERIC_WRITE) | mapping.genericWrite;
|
|
}
|
|
if ((mask & GENERIC_EXECUTE) != 0) {
|
|
mask = (mask & ~GENERIC_EXECUTE) | mapping.genericExecute;
|
|
}
|
|
return mask;
|
|
}
|
|
|
|
NormalizedAccess normalizeDesiredAccess(uint32_t desiredMask, const GenericMapping &mapping, uint32_t supportedMask,
|
|
uint32_t alwaysGrantMask, uint32_t defaultMask) {
|
|
NormalizedAccess out{};
|
|
uint32_t requested = mapGenericMask(desiredMask, mapping);
|
|
if (requested == 0 && desiredMask == 0 && defaultMask != 0) {
|
|
requested = defaultMask;
|
|
}
|
|
requested |= alwaysGrantMask;
|
|
|
|
out.requestedMask = requested;
|
|
out.grantedMask = requested & supportedMask;
|
|
out.deniedMask = requested & ~supportedMask;
|
|
return out;
|
|
}
|
|
|
|
} // namespace wibo::access
|