[DllImport(ImportFileName, EntryPoint = "GetLocalUserPasswordInformation")] // 32-bit version private static extern int GetLocalUserPasswordInformation32(string userName, ref UserPasswordInformation32 userPasswordInfo, out AccountStatus status);
// Bit-size/platform inter-mediator for getting user password information private static int GetLocalUserPasswordInformation(string userName, out UserPasswordInformation userPasswordInfo, out AccountStatus accountStatus) { userPasswordInfo = new UserPasswordInformation(); if (Common.GetOSPlatformID() == PlatformID.MacOSX) { int lastChangeDate, maxDaysForChange, accountExpirationDate; accountStatus = AccountStatus.Normal; // Mac OS X call if (GetLocalUserPasswordInformationMac(userName, out lastChangeDate, out maxDaysForChange, out accountExpirationDate) == 0) { userPasswordInfo.lastChangeDate = lastChangeDate; userPasswordInfo.maxDaysForChange = maxDaysForChange; userPasswordInfo.accountExpirationDate = accountExpirationDate; return 0; } } else { if (IntPtr.Size == 4) { // 32-bit OS call UserPasswordInformation32 userPasswordInfo32 = new UserPasswordInformation32(); if (GetLocalUserPasswordInformation32(userName, ref userPasswordInfo32, out accountStatus) == 0) { userPasswordInfo.lastChangeDate = userPasswordInfo32.lastChangeDate; userPasswordInfo.minDaysForChange = userPasswordInfo32.minDaysForChange; userPasswordInfo.maxDaysForChange = userPasswordInfo32.maxDaysForChange; userPasswordInfo.warningDays = userPasswordInfo32.warningDays; userPasswordInfo.inactivityDays = userPasswordInfo32.inactivityDays; userPasswordInfo.accountExpirationDate = userPasswordInfo32.accountExpirationDate; return 0; } } else { // 64-bit OS call return GetLocalUserPasswordInformation64(userName, ref userPasswordInfo, out accountStatus); } } return 1; }