NetFileGetInfo,NetFileEnum使用疑问(获取用户名问题),up有分,不够再加,1000都没问题,只要求解。
在制作一个服务器端的文件监控系统中,使用NetFileEnum获取所有资源的访问。
例如有一个文件被用户访问,这时我想获得是哪个用户访问的这个文件,
使用NetFileGetInfo获取这个文件的信息,能够获取访问这个文件的所有用户。
问题出在这里:当访问的用户只有一个时,能够正确地获取。
当访问的用户有多个,这时,哪个用户先访问文件所在的文件夹,哪个用户就被列了出来。
而真正对文件操作的用户,没有被获取到。
请问各位大侠,怎么样解决这个问题,是不是有什么地方设置不对?还是应该用别的API?
代码如下,省略了一些无关紧要的东西。
netapistatus = NetFileEnum((char *)RemoteName, (char *)BasePath, (char *)UserName, Level, &ptb, MAX_PREFERRED_LENGTH, &dw1, &dw2, NULL);
if (netapistatus != NERR_Success || ptb == NULL)
{
str.Format("Error %d enumerating open files: %d. ", netapistatus, ++FailNumber );
LogOut(str);
}
else
{
FILE_INFO_3 *pfileinfo3 = (FILE_INFO_3 *)ptb;
for (d = 0; d < dw1; d++)
{
if (Level > 2)
{
LPBYTE tempFileInfo;
netapistatus = NetFileGetInfo((char *)RemoteName, pfileinfo3->fi3_id, 3, &tempFileInfo);
if (netapistatus != NERR_Success || ptb == NULL)
{
str.Format("Error %d NetFileGetInfo open files: %d. ", netapistatus, ++FailNumber );
LogOut(str);
}
else
{
FILE_INFO_3 *pfileinfo = (FILE_INFO_3 *)tempFileInfo;
if (pfileinfo->fi3_username != NULL && wcslen((LPWORD)pfileinfo->fi3_username) )
{
int num=WideCharToMultiByte( CP_ACP, 0, (unsigned short *)(pfileinfo->fi3_username), -1, szUserName, 0, NULL, NULL);
WideCharToMultiByte( CP_ACP, 0, (unsigned short *)(pfileinfo->fi3_username), -1, szUserName, num, NULL, NULL);
strUsername.Format("%s", szUserName);
}
}
NetApiBufferFree(tempFileInfo);
}
}
}