仅允许管理员用户设置网络共享文件夹

时间:2013-07-16 15:02:30

标签: c++ share

我正在尝试创建一个共享文件夹,只允许管理员用户写入/读取它。

这就是我所拥有的:

 NET_API_STATUS res;
 SHARE_INFO_2 p;
 DWORD parm_err = 0;

      // Fill in the SHARE_INFO_2 structure.
      //

      p.shi2_netname = TEXT("QueuesSHAREDTest");    
      p.shi2_type = STYPE_DISKTREE; // disk drive
      p.shi2_remark = TEXT("TESTSHARE to test Queues Folders");
      p.shi2_permissions = 0;    
      p.shi2_max_uses = -1;
      p.shi2_current_uses = 0;    
      p.shi2_path = TEXT(Path);
      p.shi2_passwd = NULL; // no password
      //
      // Call the NetShareAdd function,
      //  specifying level 2.
      //
      res=NetShareAdd(NULL, 2, (LPBYTE) &p, &parm_err);
      //
      // If the call succeeds, inform the user.
      //
      if(res==0)
         printf("Share created.\n");

      // Otherwise, print an error,
      //  and identify the parameter in error.
      //
      else
         printf("Error: %u\tparmerr=%u\n", res, parm_err);

我无法找到共享权限的选项。 这只允许我设置写/读/执行...权限。

之前有人这样做过,可以帮一下吗?

1 个答案:

答案 0 :(得分:0)

您可以通过在共享上设置DACL(自由访问控制列表)来控制谁可以访问共享。

您可以通过调用GetNamedSecurityInfo来检索对象的当前权限,然后修改DACL,然后调用SetNamedSecurityInfo以将修改后的DACL与共享相关联。

或者,您可以使用NetShareGetInfo调用information level 503来检索当前安全描述符,然后修改DACL,然后使用NetShareSetInfo调用information level 1501以关联修改后的安全性描述与共享。

然而,缺乏一个非常好的理由,我会使用Get / SetNamedSecurityInfo。操纵DACL足够痛苦 - 您不需要添加任何额外的难度。