在制作一个服务器端的文件监控系统中,使用NetFileEnum获取所有资源的访问。
例如有一个文件被用户访问,这时我想获得是哪个用户访问的这个文件,
使用NetFileGetInfo获取这个文件的信息,能够获取访问这个文件的所有用户。
问题出在这里:当访问的用户只有一个时,能够正确地获取。
当访问的用户有多个,这时,哪个用户先访问文件所在的文件夹,哪个用户就被列了出来。
而真正对文件操作的用户,没有被获取到。
请问各位大侠,怎么样解决这个问题,是不是有什么地方设置不对?还是应该用别的API?
代码如下,省略了一些无关紧要的东西。
Code
1netapistatus = NetFileEnum((char *)RemoteName, (char *)BasePath, (char *)UserName, Level, &ptb, MAX_PREFERRED_LENGTH, &dw1, &dw2, NULL);
2if (netapistatus != NERR_Success || ptb == NULL)
3{
4str.Format("Error %d enumerating open files: %d. ", netapistatus, ++FailNumber );
5LogOut(str);
6}
7else
8{
9FILE_INFO_3 *pfileinfo3 = (FILE_INFO_3 *)ptb;
10
11for (d = 0; d < dw1; d++)
12{
13if (Level > 2)
14{
15LPBYTE tempFileInfo;
16netapistatus = NetFileGetInfo((char *)RemoteName, pfileinfo3->fi3_id, 3, &tempFileInfo);
17
18if (netapistatus != NERR_Success || ptb == NULL)
19{
20str.Format("Error %d NetFileGetInfo open files: %d. ", netapistatus, ++FailNumber );
21LogOut(str);
22}
23else
24{
25FILE_INFO_3 *pfileinfo = (FILE_INFO_3 *)tempFileInfo;
26if (pfileinfo->fi3_username != NULL && wcslen((LPWORD)pfileinfo->fi3_username) )
27{
28int num=WideCharToMultiByte( CP_ACP, 0, (unsigned short *)(pfileinfo->fi3_username), -1, szUserName, 0, NULL, NULL);
29WideCharToMultiByte( CP_ACP, 0, (unsigned short *)(pfileinfo->fi3_username), -1, szUserName, num, NULL, NULL);
30strUsername.Format("%s", szUserName);
31}
32}
33
34NetApiBufferFree(tempFileInfo);
35}
36}
37}