Как определить имя пользователя
От: Gorets  
Дата: 03.07.02 05:09
Оценка:
Подскажите, пожалуйста!

Как программно определить имя пользователя, работающего с файлом, находящимся на сетевом диске? Или имя машины, с которой осуществляется доступ к файлу?

Буду благодарен за любые рекоммендации.
Re: Как определить имя пользователя
От: Vsevolod V.Burkutsky Россия  
Дата: 03.07.02 06:42
Оценка:
Здравствуйте Gorets, Вы писали:

G>Подскажите, пожалуйста!


G>Как программно определить имя пользователя, работающего с файлом, находящимся на сетевом диске? Или имя машины, с которой осуществляется доступ к файлу?


G>Буду благодарен за любые рекоммендации.


NetFileEnum(...)
NetFileGetInfo(...)

NetSessionEnum(...)
NetSessionGetInfo(...)
With best regards
Vsevolod V.Burkutsky...
Re[2]: Как определить имя пользователя
От: Аноним  
Дата: 05.07.02 06:42
Оценка:
Здравствуйте Vsevolod V.Burkutsky, Вы писали:

G>>Как программно определить имя пользователя, работающего с файлом, находящимся на сетевом диске? Или имя машины, с которой осуществляется доступ к файлу?


VV>NetFileEnum(...)

VV>NetFileGetInfo(...)

VV>NetSessionEnum(...)

VV>NetSessionGetInfo(...)

Еще вопрос.

NetFileEnum возвращает информацию об открытом файле в виде:
typedef struct _FILE_INFO_3 {
DWORD fi3_id;
DWORD fi3_permissions;
DWORD fi3_num_locks;
LPWSTR fi3_pathname;
LPWSTR fi3_username;
} FILE_INFO_3, *PFILE_INFO_3, *LPFILE_INFO_3;

Как отсюда определить имя файла? (fi3_pathname содержит только путь к файлу)

With best regards, Gorets
Re[3]: Как определить имя пользователя
От: Vsevolod V.Burkutsky Россия  
Дата: 05.07.02 08:11
Оценка:
Здравствуйте Аноним, Вы писали:


А>Еще вопрос.


А>NetFileEnum возвращает информацию об открытом файле в виде:

А>typedef struct _FILE_INFO_3 {
А> DWORD fi3_id;
А> DWORD fi3_permissions;
А> DWORD fi3_num_locks;
А> LPWSTR fi3_pathname;
А> LPWSTR fi3_username;
А>} FILE_INFO_3, *PFILE_INFO_3, *LPFILE_INFO_3;

А>Как отсюда определить имя файла? (fi3_pathname содержит только путь к файлу)


А>With best regards, Gorets


Нет, fi3_pathname содержит полный путь к открытому ресурсу

fi3_pathname 
Pointer to a Unicode string that specifies the path of the opened resource

т.е если ты ( или кто ещё ) на шаре открыл папку ( ну, посмотреть какие там файлы )
то у тебя будет fi3_pathname — путь к этой папке( включая её имя )
если открыт файл, то у темя будет путь к файлу ( естественно включая его имя )
With best regards
Vsevolod V.Burkutsky...
Re[4]: Как определить имя пользователя
От: Gorets  
Дата: 05.07.02 11:20
Оценка:
Здравствуйте Vsevolod V.Burkutsky, Вы писали:

VV>Нет, fi3_pathname содержит полный путь к открытому ресурсу


VV>
VV>fi3_pathname 
VV>Pointer to a Unicode string that specifies the path of the opened resource
VV>

VV>т.е если ты ( или кто ещё ) на шаре открыл папку ( ну, посмотреть какие там файлы )
VV>то у тебя будет fi3_pathname — путь к этой папке( включая её имя )
VV>если открыт файл, то у темя будет путь к файлу ( естественно включая его имя )
VV>

Я открываю файл на чтение или редактирование и в fi3_pathname получаю
только путь к файлу (без его имени). Чем это можно объяснить?

With best regargs, Gorets
Re[5]: Как определить имя пользователя
От: Vsevolod V.Burkutsky Россия  
Дата: 05.07.02 11:32
Оценка:
Здравствуйте Gorets, Вы писали:

G>Здравствуйте Vsevolod V.Burkutsky, Вы писали:


VV>>Нет, fi3_pathname содержит полный путь к открытому ресурсу


VV>>
VV>>fi3_pathname 
VV>>Pointer to a Unicode string that specifies the path of the opened resource
VV>>

VV>>т.е если ты ( или кто ещё ) на шаре открыл папку ( ну, посмотреть какие там файлы )
VV>>то у тебя будет fi3_pathname — путь к этой папке( включая её имя )
VV>>если открыт файл, то у темя будет путь к файлу ( естественно включая его имя )
VV>>

G>Я открываю файл на чтение или редактирование и в fi3_pathname получаю

G>только путь к файлу (без его имени). Чем это можно объяснить?

G>With best regargs, Gorets


Просмотри все entries возвращённые enumom.

Скорее всего ты получаешь и имя открытого фолдера , и имя файла.

Проверь.


LPBYTE pBuf = NULL;
    DWORD dwRead = 0;
    DWORD dwTotal = 0;
    NET_API_STATUS apiRes = NetFileEnum(NULL,
                    NULL, 
                    NULL,
                    3,
                    &pBuf,
                    MAX_PREFERRED_LENGTH,
                    &dwRead,
                    &dwTotal,
                    NULL );

    ASSERT( apiRes == NERR_Success );

    FILE_INFO_3* pInfo = (FILE_INFO_3*)pBuf;
    for( int i = 0 ; i < dwRead ; i++ )
    {
        pInfo++;
        CComBSTR bsPath = pInfo->fi3_pathname; 
    }
With best regards
Vsevolod V.Burkutsky...
Re: Как определить имя пользователя
От: SSergio  
Дата: 12.12.03 12:41
Оценка:
Пытаюсь сделать прогрмму вставляю туда код из последнего ответа а он мне выдает переменную отвечающую за количество записей равной 0. Хотя и на моем компе и на удаленном открыты фаилы. Работаю под админом в XP c чем может быть связана подобная ошибка. Функция возвращает значение что она отработала правильно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.