private string GetStringFromLicense(string s, LicenseStateData sd) { // These are my best guesses about about how to format this data. MSDN // is pretty vague about the whole thing. DateTime d1, d2; string sRet = ""; for (int x = 0; x < sd.dwNumStates; x++) { switch (sd.stateData[x].dwCategory) { case LicenseStateCategory.NoRight: sRet += string.Format("{0} not permitted.", s); break; case LicenseStateCategory.UnLimited: sRet += string.Format("{0} unlimited.", s); break; case LicenseStateCategory.Count: sRet += string.Format("{0} valid {1} times.", s, sd.stateData[x].dwCount[0]); break; case LicenseStateCategory.From: d1 = FileTimeToDateTime(sd.stateData[x].datetime[0]); sRet += string.Format("{0} valid from {1}.", s, d1.ToShortDateString()); break; case LicenseStateCategory.Until: d1 = FileTimeToDateTime(sd.stateData[x].datetime[0]); sRet += string.Format("{0} valid until {1}.", s, d1.ToShortDateString()); break; case LicenseStateCategory.FromUntil: d1 = FileTimeToDateTime(sd.stateData[x].datetime[0]); d2 = FileTimeToDateTime(sd.stateData[x].datetime[1]); sRet += string.Format("{0} valid from {1} to {2}.", s, d1.ToShortDateString(), d2.ToShortDateString()); break; case LicenseStateCategory.CountFrom: d1 = FileTimeToDateTime(sd.stateData[x].datetime[0]); sRet += string.Format("{0} valid {1} times from {2}.", s, sd.stateData[x].dwCount[0], d1.ToShortDateString()); break; case LicenseStateCategory.CountUntil: d1 = FileTimeToDateTime(sd.stateData[x].datetime[0]); sRet += string.Format("{0} valid {1} times until {2}.", s, sd.stateData[x].dwCount[0], d1.ToShortDateString()); break; case LicenseStateCategory.CountFromUntil: d1 = FileTimeToDateTime(sd.stateData[x].datetime[0]); d2 = FileTimeToDateTime(sd.stateData[x].datetime[1]); sRet += string.Format("{0} valid {1} times from {2} to {3}.", s, sd.stateData[x].dwCount[0], d1.ToShortDateString(), d2.ToShortDateString()); break; case LicenseStateCategory.ExpirationAfterFristUse: sRet += string.Format("{0} valid for {1} hours from first use.", s, sd.stateData[x].dwCount[0]); break; default: sRet += "Unrecognized state category"; break; } if (x != sd.dwNumStates - 1) { sRet += "\n"; } } return(sRet); }
//------------------------------------------------------------------------------ // Name: PrintProperty() // Desc: Display the specified property. //------------------------------------------------------------------------------ public string GetPropertyAsString(string pwszPropertyName) { byte [] pValue; AttrDataType Wmt; QueryProperty(pwszPropertyName, out pValue, out Wmt); string sRet = null; switch (Wmt) { case AttrDataType.STRING: { sRet = Encoding.Unicode.GetString(pValue); break; } case AttrDataType.BOOL: { sRet = BitConverter.ToBoolean(pValue, 0).ToString(); break; } case AttrDataType.WORD: { sRet = BitConverter.ToInt16(pValue, 0).ToString(); break; } case AttrDataType.DWORD: { sRet = BitConverter.ToInt32(pValue, 0).ToString(); break; } case AttrDataType.QWORD: { sRet = BitConverter.ToInt64(pValue, 0).ToString(); break; } case AttrDataType.GUID: { sRet = new Guid(pValue).ToString(); break; } case AttrDataType.BINARY: { if (pwszPropertyName.StartsWith(Constants.g_wszWMDRM_LicenseState)) { LicenseStateData sd = new LicenseStateData(pValue); sRet = GetStringFromLicense(pwszPropertyName.Substring(Constants.g_wszWMDRM_LicenseState.Length), sd); } else { sRet = "Query successful, but cannot format for display"; } break; } default: { sRet = "Query successful, but cannot format for display"; break; } } return(sRet); }