// Receiving currently logged user
DWORD dwUserBuf = 256;
char chCurrentUser[256] = {0};
GetUserName(chCurrentUser, &dwUserBuf);
SID userSID;
DWORD dwSID;
TCHAR chSID[256];
LookupAccountName(NULL, chCurrentUser, &userSID, &dwSID, NULL, NULL, NULL);
// Loading ConvertSidToStringSid
typedef BOOL (WINAPI *tConvertSidToStringSid)(PSID,LPTSTR);
tConvertSidToStringSid pConvertSidToStringSid=0;
HINSTANCE handle = ::LoadLibrary("Advapi32.dll");
if (handle == NULL) return;
pConvertSidToStringSid = (tConvertSidToStringSid) ::GetProcAddress(handle, "ConvertSidToStringSidA");
if (pConvertSidToStringSid)
{
/// call the fucntion with your parameter
pConvertSidToStringSid(&userSID, chSID);
}
::FreeLibrary(handle);
MessageBox(NULL, chSID, "SID is:", MB_OK);
ConvertSidToStringSid
Цитата:
The memory could not be "read"
Вот код:
Код:
Мне кажится что я где-то с переменными что то не то сделал. Но где именно ?
Код:
char chCurrentUser[256] = {0};
GetUserName(chCurrentUser, &dwUserBuf);
SID userSID;
DWORD dwSID;
TCHAR chSID[256];
GetUserName(chCurrentUser, &dwUserBuf);
SID userSID;
DWORD dwSID;
TCHAR chSID[256];
Странно.... почему chCurrentUser - char, а chSID - TCHAR ?
Цитата:
the memory cound bot be "read"
Вылетает она на строке сразу же после messagebox''a (step 1), т.е. тут :
Код:
if(!LookupAccountName(NULL, chCurrentUser, &userSID, &dwSID, szRef, &cbRef, NULL))
не доходя до step 2.
Вот еще раз код обновленный:
Код:
// Получаем текущего пользователя
DWORD dwUserBuf = 256;
char chCurrentUser[256] = {0};
GetUserName(chCurrentUser, &dwUserBuf);
PSID userSID;
DWORD dwSID = 1024*512;
TCHAR *chSID;
char szRef[MAX_PATH]={0};
DWORD cbRef = sizeof(szRef);
MessageBox(NULL, "step 1", "step 1", MB_OK);
if(!LookupAccountName(NULL, chCurrentUser, &userSID, &dwSID, szRef, &cbRef, NULL))
{
MessageBox(NULL, "cant lookupaccountname", "error", MB_OK);
}
// Загружаем функцию ConvertSidToStringSid
MessageBox(NULL, "step 2", "step 2", MB_OK);
typedef BOOL (WINAPI *tConvertSidToStringSid)(PSID,LPTSTR*);
tConvertSidToStringSid pConvertSidToStringSid=0;
HINSTANCE handle = ::LoadLibrary("Advapi32.dll");
if (handle == NULL) return;
MessageBox(NULL, "step 3", "step 3", MB_OK);
pConvertSidToStringSid = (tConvertSidToStringSid) ::GetProcAddress(handle, "ConvertSidToStringSidA");
if (pConvertSidToStringSid)
{
/// call the fucntion with your parameter
pConvertSidToStringSid(&userSID, &chSID);
}
::FreeLibrary(handle);
MessageBox(NULL, chSID, "SID", MB_OK);
LocalFree((HLOCAL)chSID);
DWORD dwUserBuf = 256;
char chCurrentUser[256] = {0};
GetUserName(chCurrentUser, &dwUserBuf);
PSID userSID;
DWORD dwSID = 1024*512;
TCHAR *chSID;
char szRef[MAX_PATH]={0};
DWORD cbRef = sizeof(szRef);
MessageBox(NULL, "step 1", "step 1", MB_OK);
if(!LookupAccountName(NULL, chCurrentUser, &userSID, &dwSID, szRef, &cbRef, NULL))
{
MessageBox(NULL, "cant lookupaccountname", "error", MB_OK);
}
// Загружаем функцию ConvertSidToStringSid
MessageBox(NULL, "step 2", "step 2", MB_OK);
typedef BOOL (WINAPI *tConvertSidToStringSid)(PSID,LPTSTR*);
tConvertSidToStringSid pConvertSidToStringSid=0;
HINSTANCE handle = ::LoadLibrary("Advapi32.dll");
if (handle == NULL) return;
MessageBox(NULL, "step 3", "step 3", MB_OK);
pConvertSidToStringSid = (tConvertSidToStringSid) ::GetProcAddress(handle, "ConvertSidToStringSidA");
if (pConvertSidToStringSid)
{
/// call the fucntion with your parameter
pConvertSidToStringSid(&userSID, &chSID);
}
::FreeLibrary(handle);
MessageBox(NULL, chSID, "SID", MB_OK);
LocalFree((HLOCAL)chSID);
Вот пример, из платформ SDK
Цитата:
Originally posted by mail0
Вот пример, из платформ SDK
Вот пример, из платформ SDK
А это правильно что файла ntsecapi.h нету :) ?
Цитата:
Originally posted by ProgMaster
А это правильно что файла ntsecapi.h нету :) ?
А это правильно что файла ntsecapi.h нету :) ?
А вот для этого надо поставить Platform SDK :) .