だから私は、インストーラにdllを表示するのに問題があるので、私のプロジェクトでActiveDを使うことを避ける方法を見つけようとしています。それを持つ唯一の理由は、pwdLastSetをLongIntegerとしてキャストすることです。ActiveDsを使用せずにActiveDirectory pwdLastSetプロパティをキャストする
私は文書化されていない代替案を発見しました。それをテストするとき、それは死んでいるか、429.49673秒遅れています。なぜ、誰にも分かりませんか? (私がテストした20/49人は429.49673秒離れている)。
UPDATE:LowPartが負の場合はそうです。
コード:
private static string DateTest() {
return DateTest(Environment.UserName);
}
private static string DateTest(string userName) {
userName = userName.Trim();
DateTime hacked, normal;
using (DirectorySearcher ds = new DirectorySearcher()) {
ds.SearchScope = SearchScope.Subtree;
ds.PropertiesToLoad.Add("distinguishedName");
ds.PropertiesToLoad.Add("pwdLastSet");
ds.PageSize = 1;
ds.ServerPageTimeLimit = TimeSpan.FromSeconds(2);
ds.Filter = string.Format("(&(objectCategory=user)(sAMAccountName={0}))", userName);
SearchResult sr = ds.FindOne();
hacked = DateTime.FromFileTime((long)sr.Properties["pwdLastSet"][0]);
using (DirectoryEntry user = sr.GetDirectoryEntry()) {
var value = user.Properties["pwdLastSet"][0] as ActiveDs.LargeInteger;
var longValue = (((long)value.HighPart) << 32) + (long)value.LowPart;
normal = DateTime.FromFileTime(longValue);
}
}
return string.Format("{3} - Difference: {0:0.0} seconds. Established Method returns: {1}. Hacked method returns: {2}",
hacked.Subtract(normal).TotalSeconds, normal, hacked, userName);
}
}
参考文献:
- のActive DSタイプライブラリ
- System.DirectoryServices
429秒をかけたり下?あなたは何をそれと比較していますか? –
LowPartが負の場合、標準的な方法を使用して選択した場合、取得した時刻から429.49673秒後にハッキングされます。 LowPartが正の場合、ハッキングされた方法は標準的な方法と同じ時間になるようです。 – colinbashbash