用delphi写是比较困难的,下面是用bcb写的<br>(假如你已经成功添加了一个testshared的共享,下面设置<br>仅“guest”用户有完全控制权限)<br><br>char* sid;<br>char* domain;<br>DWORD cbsid=0,cbdomain=0;<br>SID_NAME_USE name;<br>char username[]="guest"; //用户名<br>LookupAccountName(NULL,username,NULL,&cbsid,NULL,&cbdomain,&name);<br> //得到缓冲区需要的长度<br>DWORD err=GetLastError();<br>if(err!=122)<br> throw Exception(SysErrorMessage(err));<br>domain=new char[cbdomain];<br>sid=new char[cbsid];<br>LookupAccountName(NULL,username,sid,&cbsid,domain,&cbdomain,&name);<br> //得到guest用户的sid<br>delete[] domain;<br>delete[] sid;<br><br>char acl[1024];<br>InitializeAcl((ACL*)acl,sizeof acl,ACL_REVISION );<br> //初始化一个空的acl<br>AddAccessAllowedAce((ACL*)acl,ACL_REVISION,GENERIC_ALL,sid);<br> //将允许sid(这里是guest用户)的权限加入acl<br> // GENERIC_ALL就是“完全控制”<br> // DELETE|GENERIC_WRITE 就是“更改”<br> // GENERIC_EXECUTE|GENERIC_READ 就是“读取”<br> //实际上面几个权限是可以自由组合的,比如你可以设置<br> //GENERIC_READ|DELETE 的权限,这时候你在安全属性<br> //看到读取和更改都没有打勾(因为有delete和write你才能看到<br> //“更改”上打勾,有execute和read配合才能看到读取上打勾),<br> //但是你实际上权限是设置成功的,可以读文件、删文件,<br> //但是不能创建、修改文件<br><br>SECURITY_DESCRIPTOR sd;<br>InitializeSecurityDescriptor(&sd,SECURITY_DESCRIPTOR_REVISION);<br>SetSecurityDescriptorDacl(&sd,true,(ACL*)acl,false);<br> //将acl加入security descriptor<br><br>SHARE_INFO_1501 sinfo={0,&sd};<br>NetShareSetInfo(NULL,L"testshared",1501,(unsigned char*)&sinfo,NULL);<br> //设置共享的权限<br>