|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Как получить имя владельца файла на WINAPI |
|
Как получить имя владельца файла на WINAPI
|
Новый участник Сообщения: 15 |
Профиль | Отправить PM | Цитировать Помогите плз. Как в винапи получить имя пользователя, создавшего файл?
И, если получил дескриптор, то как из него выудить имя пользователя? |
|
Отправлено: 21:11, 31-05-2006 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать Попробуй сначала узнать, кто сделал файл, вручную, а не программой. Это получится сделать в NTFS и то не всегда. Если вручную удалить права создателя, то вообще нельзя выяснить, кто это был. Если такой способ устраивает, читай MSDN в разделе Security. Ещё попробуй (сначала вручную) аудит. Читай в том же разделе. Вот тупо выдраный пример, который, наверное, тебя и интересует:
// The following example uses the GetSecurityInfo and LookupAccountSid // functions to find and print the name of the owner of a file. // The file exists in the current working directory on the local server. #include <stdio.h> #include <windows.h> #include <tchar.h> #include "accctrl.h" #include "aclapi.h" int main(int argc, char **argv) { DWORD dwRtnCode = 0; PSID pSidOwner; BOOL bRtnBool = TRUE; LPTSTR AcctName, DomainName; DWORD dwAcctName = 1, dwDomainName = 1; SID_NAME_USE eUse = SidTypeUnknown; HANDLE hFile; PSECURITY_DESCRIPTOR pSD; // Get the handle of the file object. hFile = CreateFile( "myfile.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); // Check GetLastError for CreateFile error code. if (hFile == INVALID_HANDLE_VALUE) { DWORD dwErrorCode = 0; dwErrorCode = GetLastError(); _tprintf(TEXT("CreateFile error = %d\n"), dwErrorCode); return -1; } // Allocate memory for the SID structure. pSidOwner = (PSID)GlobalAlloc( GMEM_FIXED, sizeof(PSID)); // Allocate memory for the security descriptor structure. pSD = (PSECURITY_DESCRIPTOR)GlobalAlloc( GMEM_FIXED, sizeof(PSECURITY_DESCRIPTOR)); // Get the owner SID of the file. dwRtnCode = GetSecurityInfo( hFile, SE_FILE_OBJECT, OWNER_SECURITY_INFORMATION, &pSidOwner, NULL, NULL, NULL, &pSD); // Check GetLastError for GetSecurityInfo error condition. if (dwRtnCode != ERROR_SUCCESS) { DWORD dwErrorCode = 0; dwErrorCode = GetLastError(); _tprintf(TEXT("GetSecurityInfo error = %d\n"), dwErrorCode); return -1; } // First call to LookupAccountSid to get the buffer sizes. bRtnBool = LookupAccountSid( NULL, // local computer pSidOwner, AcctName, (LPDWORD)&dwAcctName, DomainName, (LPDWORD)&dwDomainName, &eUse); // Reallocate memory for the buffers. AcctName = (char *)GlobalAlloc( GMEM_FIXED, dwAcctName); // Check GetLastError for GlobalAlloc error condition. if (AcctName == NULL) { DWORD dwErrorCode = 0; dwErrorCode = GetLastError(); _tprintf(TEXT("GlobalAlloc error = %d\n"), dwErrorCode); return -1; } DomainName = (char *)GlobalAlloc( GMEM_FIXED, dwDomainName); // Check GetLastError for GlobalAlloc error condition. if (DomainName == NULL) { DWORD dwErrorCode = 0; dwErrorCode = GetLastError(); _tprintf(TEXT("GlobalAlloc error = %d\n"), dwErrorCode); return -1; } // Second call to LookupAccountSid to get the account name. bRtnBool = LookupAccountSid( NULL, // name of local or remote computer pSidOwner, // security identifier AcctName, // account name buffer (LPDWORD)&dwAcctName, // size of account name buffer DomainName, // domain name (LPDWORD)&dwDomainName, // size of domain name buffer &eUse); // SID type // Check GetLastError for LookupAccountSid error condition. if (bRtnBool == FALSE) { DWORD dwErrorCode = 0; dwErrorCode = GetLastError(); if (dwErrorCode == ERROR_NONE_MAPPED) _tprintf(TEXT("Account owner not found for specified SID.\n")); else _tprintf(TEXT("Error in LookupAccountSid.\n")); return -1; } else if (bRtnBool == TRUE) // Print the account name. _tprintf(TEXT("Account owner = %s\n"), AcctName); return 0; } |
Отправлено: 23:03, 31-05-2006 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Замена прав файла и владельца при перемещении файла в другой каталог. W2K3R2 | GreenIce | Microsoft Windows NT/2000/2003 | 18 | 30-10-2011 18:16 | |
[решено] Как получить имя ветки реестра? | garanov | AutoIt | 11 | 18-12-2009 12:25 | |
CMD/BAT - [решено] Как скопировать имя файла из текстового файла в код батника и т.д. | Nun-Nun | Скриптовые языки администрирования Windows | 6 | 13-05-2009 13:28 | |
Как получить имя текущего пользователя для использования его в имени файла | Denchik | Автоматическая установка Windows 2000/XP/2003 | 1 | 25-01-2006 22:33 | |
Как получить имя терминальной линии? | Diesel | Программирование и базы данных | 1 | 16-06-2003 21:04 |
|