Во-первых, попробуйте добавить привилегию SeManageVolumePrivilege. Возможно, это поможет.
BOOL AddPrivilege(LPCTSTR PrivilegeName)
{
HANDLE hToken = NULL;
TOKEN_PRIVILEGES tkp;
BOOL ret = FALSE;
while (1)
{
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
break;
//------------------------------------------
if (!LookupPrivilegeValue(NULL, PrivilegeName,
&tkp.Privileges[0].Luid))
break;
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
ret = AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES) NULL, 0);
break;
}
if (hToken)
CloseHandle(hToken);
return ret;
}
void main()
{
setlocale(LC_ALL,"");
AddPrivilege(SE_MANAGE_VOLUME_NAME);
GetClusters("f:\\Wide_Wallpapers_pac\\1 (124).jpg",1);
return;
}
А во-вторых, никогда не вываливайте на форум кучу кода со словами "что-то тут не работает". Никто за вас не будет отлаживать этот код. Если хотите получить от кого-то помощи, всегда конкретизируйте проблему. Что именно не работает, как вы определили, что не работает, как должно быть. Если функция возвращает ошибку, то указывайте код ошибки.
B>Оригинал работает, а моя версия нет, хотя все параметры передаются, по-моему, правильно и функция возвращает ненулевое значение