Ændring af Mappe Rettigheder over Lan.
Hej jeg har skrevet en Consol Application som hurtigt forklaret.Ændre i nogle Registreings databaser, renamer nogle mapper og andre småting..
Men dens vigtigste metode er at den går ens Homefolder (C:\Docs and Settings\Brugernavn) igennem og ændre ens rettigheder såvælg du hedder Ck for Ckri rettighederne i stedet for..
Dette gøres for at kunne flytte brugerende over på et nyt Domæne.. dette betyder at Ck ligger på det gamle og Ckri på det nye.
Alt dette fungere fint hvis jeg køre det lokalt på min maskine.
Men hvis jeg flytter det over på en test maskine vi har, og køre det via en Domain Administrator bruger (Som har mere end nok rettigheder) for jeg en fejl hver gang den skal ændre rettighederne
Fejlen lyder på.
Strukturen af sikkerheds-id'et er ugyldig. (Undtagelse fra HRESULT: 0x80070539)
Code Snippet:
public void Rightchange(string path, string UsrName, int accessMask, int flag, string oldUsrName)
{
string strFile = path;
try
{
ADsSecurityUtilityClass secuUtil = new ADsSecurityUtilityClass();
object ob = secuUtil.GetSecurityDescriptor(
strFile,
(int)ActiveDs.ADS_PATHTYPE_ENUM.ADS_PATH_FILE,
(int)ActiveDs.ADS_SD_FORMAT_ENUM.ADS_SD_FORMAT_IID);
if (null != ob)
{
ActiveDs.IADsSecurityDescriptor sd =
(IADsSecurityDescriptor)ob;
ActiveDs.IADsAccessControlList obDacl =
(ActiveDs.IADsAccessControlList)sd.DiscretionaryAcl;
bool bAddAce = true;
IEnumerator obAceEnum = obDacl.GetEnumerator();
while (obAceEnum.MoveNext())
{
IADsAccessControlEntry obAce =
(IADsAccessControlEntry)obAceEnum.Current;
Console.WriteLine("Trustee: {0}", obAce.Trustee);
// Check if "ASPNET" account is trustee of ACE or not.
if (obAce.Trustee.IndexOf(UsrName) != -1)
{
// Check if this is a ALOWED Ace or not.
if (obAce.AceType ==
(int)ADS_ACETYPE_ENUM.ADS_ACETYPE_ACCESS_ALLOWED)
{
bAddAce = false;
}
}
}
// If bAddAce flag is set, then we will add it.
if (bAddAce)
// Her oprettes den nye.
{
AccessControlEntryClass obNewAce =
new AccessControlEntryClass();
obNewAce.AceType =
(int)ADS_ACETYPE_ENUM.ADS_ACETYPE_ACCESS_ALLOWED;
obNewAce.Trustee = UsrName;
obNewAce.AccessMask = accessMask;
obNewAce.AceFlags = flag;
obDacl.AddAce(obNewAce);
sd.DiscretionaryAcl = obDacl;
secuUtil.SetSecurityDescriptor(
strFile,
(int)ADS_PATHTYPE_ENUM.ADS_PATH_FILE,
sd,
(int)ADS_SD_FORMAT_ENUM.ADS_SD_FORMAT_IID);
done = true;
// Hvis den nye er oprettet så slettes den gamle.
if (done)
{
AccessControlEntryClass obOldAce =
new AccessControlEntryClass();
obOldAce.AceType =
(int)ADS_ACETYPE_ENUM.ADS_ACETYPE_ACCESS_ALLOWED;
obOldAce.Trustee = oldUsrName;
obOldAce.AccessMask = accessMask;
obOldAce.AceFlags = flag;
obDacl.RemoveAce(obOldAce);
sd.DiscretionaryAcl = obDacl;
secuUtil.SetSecurityDescriptor(
strFile,
(int)ADS_PATHTYPE_ENUM.ADS_PATH_FILE,
sd,
(int)ADS_SD_FORMAT_ENUM.ADS_SD_FORMAT_IID);
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
done = false;
}
Har i nogle bud på problemet ?