TirexiK
> Тебе надо на делфинарий перевести, а мне на С/С++ (win32).
ну если это просто прога открывающая доступ к папке в которой она находится, то нет разницы на чем она написана, главное с инсталера ее вызвать...
ты уже начал ее писать? может поделишся? =)
или мне патом поделится?
http://msdn.microsoft.com/en-us/library/aa379575(v=vs.85).aspx
оно и в дельфи и в C++....
Аврелий
> ты уже начал ее писать? может поделишся? =)
Не начал ещё :(
Аврелий
> http://msdn.microsoft.com/en-us/library/aa379575(v=vs.85).aspx
> оно и в дельфи и в C++....
Ну вот, вроде больше ничего и не надо.
За ссылку, кстати, спасибо - искать не надо :)
TirexiK
> Не начал ещё :(
я вот начал...
>За ссылку, кстати, спасибо - искать не надо :)
еще как надо =(
актуальные вопорсы:
1) нужно ли доставать адрес UserName\ApplicationData в UNICODE? предполагаю что на многих европейских компах UserName - это то что написал юзверь на своем родном языке... хотя почему то мне кажется что там только англицкий и кирилица =\
2) изменение прав делаю с помощью Cacls... в C++ это:
system("cacls . /E /T /C /G Administrators:F"); //откроет админам FullControl
такой способ вобще работоспособен на вин7/виста? на XP у меня работает.
3) имя администратора / пользователя зависит от языка операционки...
system("cacls . /E /T /C /G Administrators:F");
не будет работать на руской винде, там надо
system("cacls . /E /T /C /G Администраторы:F");
так же для "Everyone" = "Все", "Users" = "Пользователи"... и как я подозреваю на разных языках оно по разному.
для этого:
во первых юзать WCHAR
_wsystem(...);
во вторых, мы не можем знать как "Админстраторы" будет уругвайском, поэтому нам нужно достать имена нужных юзеров из системы.
для этого нужен код такой:
SID_NAME_USE sidNameUse;
wchar_t szAccName[256];
wchar_t szDomName[256];
DWORD dwNameSize = sizeof(szAccName)/sizeof(szAccName[0]);
DWORD dwDomSize = sizeof(szDomName)/sizeof(szDomName[0]);
PSID pSid;
SID_IDENTIFIER_AUTHORITY siaWorld = SECURITY_WORLD_SID_AUTHORITY;
AllocateAndInitializeSid(&siaWorld, 1, SECURITY_WORLD_RID, 0, 0, 0, 0, 0, 0, 0, &pSid);
LookupAccountSid(NULL, pSid, szAccName, &dwNameSize, szDomName, &dwDomSize, &sidNameUse);
FreeSid(pSid);но пока что собрать рабочий вариант с WCHAR не удалось...
я нигде не ошибся?
собрал пока что для Administrators / Everyone... кувыряю Users / Creator Owner...
Какие траблы всплывают, офигеть...
Я бы рад подключиться - две головы лучше, но на работе кранч, мать его...
Аврелий
Administrators / Users / Creator Owner это то тебе зачем, тебе только EveryOne вроде нужен.
>ПРИМЕЧАНИЕ. CACLS считается устаревшей, рекомендуется использовать ICACLS.
Думаю понятно
P.S. Посмотри, возможно там тотже трюк что и с папкой Users (она всегда такая, а вот в Explorer это и пользователи и что хочеш бывает)
Аврелий
Вот кое-что удалось нарыть, может помочь.
http://msdn.microsoft.com/en-us/library/aa382503%28v=VS.85%29.aspx
и
http://msdn.microsoft.com/en-us/library/aa372868%28VS.85%29.aspx
> 1) нужно ли доставать адрес UserName\ApplicationData в UNICODE? предполагаю что
> на многих европейских компах UserName - это то что написал юзверь на своем
> родном языке... хотя почему то мне кажется что там только англицкий и кирилица
> =\
Надо UNICODE.
> 3) имя администратора / пользователя зависит от языка операционки...
> system("cacls . /E /T /C /G Administrators:F");
> не будет работать на руской винде, там надо
> system("cacls . /E /T /C /G Администраторы:F");
Имя администратора не зависит ни от чего - оно просто может быть произвольным. Лучше не рассчитывать на какие-то строгие идентификаторы, когда работаешь с людьми. Чтобы с этим не путаться, существуют человеконечитаемые идентификаторы, базирующиеся на UUID. Через них можно идентифицировать встроенные группы.
посоны, а в мсдн вы принципиально инфу по теме находить не хотите например?
http://msdn.microsoft.com/en-us/library/aa379609%28v=VS.85%29.aspx
источники подтвердили что адрес Application Data должен быть в UTF-16 / UTF-8 ну типо юникод. (если нужно вывести строкой полный адрес)
другой источник посоветовал делать так:
If FileType(GetEnv ("appdata") + "/game/test.txt")=1 Then DeleteFile (GetEnv ("appdata") + "/game/test.txt")тогда юникод не нужен.
хотя....
char *getenv(
const char *varname
);
wchar_t *_wgetenv(
const wchar_t *varname
);
оно же char возвратит и всеравно сфейлит, не? я запутался уже..
Аврелий
> тогда юникод не нужен.
Просто там вполне может быть хоть на арабском, хоть на иврите - нужен unicode.
Надо ещё полазить по ссылке от мистера x :)
Bishop
> тебе только EveryOne вроде нужен.
ну какбы в SC2 проставлено имено адмеину, криейтор овнеру и юзерам... че они Everyone не сделали тогда? =)
Аврелий
> ну какбы в SC2 проставлено имено адмеину, криейтор овнеру и юзерам... че они
> Everyone не сделали тогда? =)
Ребята, в иногда поражаете. Ну разве не пофиг как сделали в SC2? Вам же не бездумно скопировать надо. Да действительно там сделано пользователям (создатель-владелец это пользователь установивший игру (админов то может тоже быть много)), но можно и everyone (типа все и пользователи и админы и гости, кроме того бывают еще и спец пользователи для всяких там IIS (только у рядовых пользователей такого прото нету))
Тема в архиве.