private static Term IpcTermToTerm(IpcTerm ipcTerm)
        {
            Term term = new Term();
            term.From = DateTime.FromFileTime(ipcTerm.ftStart);
            term.Duration = new TimeSpan((long)ipcTerm.dwDuration);

            return term;
        }
        // License Properties - http://msdn.microsoft.com/en-us/library/windows/desktop/hh535287(v=vs.85).aspx
        
        // IpcSetLicenseProperty() - http://msdn.microsoft.com/en-us/library/windows/desktop/hh535271(v=vs.85).aspx

        // IPC_LI_VALIDITY_TIME - http://msdn.microsoft.com/en-us/library/windows/desktop/hh535287(v=vs.85).aspx
        public static void IpcSetLicenseValidityTime(SafeInformationProtectionLicenseHandle licenseHandle, Term validityTime)
        {
            int hr = 0;

            IpcTerm ipcValidityTime = TermToIpcTerm(validityTime);

            IntPtr licenseInfoPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(IpcTerm)));
            try
            {
                Marshal.StructureToPtr(ipcValidityTime, licenseInfoPtr, false);
                hr = UnsafeNativeMethods.IpcSetLicenseProperty(
                                licenseHandle,
                                false,
                                (uint)LicensePropertyType.ValidityTime,
                                licenseInfoPtr);
                ThrowOnErrorCode(hr);
            }
            finally
            {
                Marshal.FreeHGlobal(licenseInfoPtr);
            }
        }
        private static IpcTerm TermToIpcTerm(Term term)
        {
            IpcTerm ipcTerm = new IpcTerm();
            ipcTerm.ftStart = new FileTime((long)term.From.ToFileTime());
            ipcTerm.dwDuration = (ulong)term.Duration.Ticks;

            return ipcTerm;
        }