Объявить SID Windows c++

Я пытался передать функции идентификатор SID

myFunction(SID userSid) {}

Мое семя "S-1-5-11", но я не могу понять, как передать SID в функцию

PSID sid = "S-1-5-11";
myFunction(sid);

Нет конструктора для PSID в _SID


person mpgn    schedule 08.07.2016    source источник
comment
нужен указатель на SID - myFunction(SID* userSid)   -  person RbMm    schedule 08.07.2016
comment
и PSID sid = S-1-5-11; - это ошибка - sid не является строкой   -  person RbMm    schedule 08.07.2016
comment
я получаю name of type not allowed _SID SID   -  person mpgn    schedule 08.07.2016


Ответы (1)


SID — это отдельный тип. Это непрозрачная структура данных. (реализованный как структура C), а не просто другое имя строки.

Вы не можете передать строку функции, для которой требуется формальный параметр SID. Вам нужно создать объект SID и передать его.

Существует множество функций API, позволяющих создавать идентификаторы SID и управлять ими; они перечислены здесь.

Если вы хотите создать SID из строки, содержащей действительный SID можно вызвать функцию ConvertStringSidToSid . Например:

PSID psid;
BOOL bSucceeded = ConvertStringSidToSid(TEXT("S-1-5-11"), &psid);
assert(bSucceeded != FALSE);

// ... use the SID via the pointer

// once you are finished, free it:
LocalFree(psid);
person Cody Gray    schedule 08.07.2016
comment
После утверждения, когда я вызываю myFunction(psid), я получаю «нет конструктора, подходящего для PSID для _ SID» - person mpgn; 08.07.2016
comment
@mpgn Да, ваш прототип функции указывает, что структура SID передается в функцию путем копирования. (Я не уверен, почему; вы обычно передаете эти объекты по указателям.) Здесь применяются стандартные правила C для работы с указателями. Вы бы разыменовали указатель и передали его функции: myFunction(*psid); - person Cody Gray; 08.07.2016
comment
Я пытался это сделать, но также получил эту ошибку Expression must be a pointer to a complete object type - person mpgn; 08.07.2016
comment
@mpgn: вы не можете передать объект SID по значению, вместо этого вам нужно передать его по указателю. Измените myFunction() на параметр PSID (также известный как SID*): myFunction(PSID userSid) { ... } затем вы можете передать переменную psid: myFunction(psid); - person Remy Lebeau; 08.07.2016