Программный интерфейс для лицензирования

Иллюстрации

Показать все

Изобретение относится к области компьютерных интерфейсов прикладного программирования (API) для лицензирования программного обеспечения. Техническим результатом является расширение функциональных возможностей. Лицензия определяет права по отношению к программному продукту. Программный продукт вызывает API метод "использовать право" для того, чтобы применить право. Если право существует, то сервис привязывает право к лицензии, в которой это право найдено. Программный продукт поддерживает принудительное исполнение условий лицензии, давая или отказывая в допуске к некоторым или всем функциональным возможностям, в зависимости от того, найден ли имеющий силу экземпляр права. С правом могут быть ассоциированы любые данные. API включает в себя метод для извлечения данных из права, которое предварительно было привязано в методе "использовать право". 3 н. и 22 з.п. ф-лы, 5 ил.

Реферат

Область техники, к которой относится изобретение

Настоящее изобретение относится к области компьютерного программного обеспечения, или более точно, к программным интерфейсам, которые поддерживают принудительное исполнение условий электронных лицензий.

Уровень техники

Коммерческие программные продукты традиционно предоставляются на условиях лицензионных соглашений, которые определяют допустимые границы использования этих программных продуктов. В начале возникновения практики лицензирования программного обеспечения лицензионный договор обычно имел форму юридического документа, который определял права пользователя по отношению к программному продукту. При этом необходимость исполнения условий таких лицензионных соглашений основывалась только на законодательстве. В настоящее время появилась потребность в том, чтобы контролировать исполнение условий лицензионных соглашений на электронном уровне, то есть необходимо, чтобы компьютерные программы содержали код, который активно препятствует или предотвращает использование программного продукта какими-либо способами, запрещенными лицензионным соглашением.

Большинство программных продуктов, которые поддерживают принудительное исполнение условий электронных лицензий, имеют свои собственные средства для управления лицензированием этих программных продуктов и использованием лицензий. Так, типичный коммерческий программный продукт может включать не только код, выполняющий основные функции программного продукта, но также и код для получения, оценки, защиты и управления лицензиями данного программного продукта. Для каждого производителя программного обеспечения разработка и реализация подобных средств зачастую является излишней дублирующей работой. Поэтому желательно разработать систему, которая бы предоставляла базовые функции, связанные с лицензированием программных продуктов, и которая могла бы использоваться большим разнообразием программных продуктов единым и четко определенным способом.

Из изложенного выше следует, что существует потребность в механизме, который позволит преодолеть недостатки предшествующих технологий.

Раскрытие изобретения

Данное изобретение предлагает интерфейс прикладного программирования (API), поддерживающий электронное лицензирование, который предоставляет определенные поддерживающие лицензирование функции для использования программными продуктами. Сервис лицензий выполняет функции, относящиеся к использованию лицензий, и предоставляет программным продуктам доступ к этим функциям через API. Сервис лицензий выполняет функции, такие как получение лицензий, хранение и управление лицензиями, защита лицензий от подделок, оценка того, что лицензии имеют силу, и оценку того, что лицензии корректно привязаны к машине и/или программному продукту, на которой они используются. Программы могут использовать эти функции посредством вызова методов из API.

При типичном использовании API программа вызывает API метод "открыть", чтобы получить уникальный описатель (handle), который используется сервисом лицензий, чтобы идентифицировать эту программу. Затем программа вызывает API метод "использовать право". "Использовать" в данном контексте подразумевает применение определенного права. При вызове метода "использовать право" в качестве параметров ему передается описатель программы и имя соответствующего права, которое нужно использовать. Затем сервис лицензий пытается найти одну или более имеющих силу, корректно привязанных лицензий, которые содержат право с данным именем. Если таких лицензий нет, то программе сообщается о неудаче. Если такие лицензии существуют, то это право привязывается к одной из них и вызывающая программа получает сообщение об этой привязке. В этом случае программа знает, что соответствующее право существует и может выполнять функции, ассоциированные с этим правом.

В предпочтительном воплощении сервис лицензий не определяет, какие функции программа может или не может выполнять согласно какому-либо праву, а также не накладывает существенных ограничений на использование программы. Предпочтительно, если сервис лицензий будет управлять лицензиями таким образом, что, вызывая API, программы будут получать информацию о том, существует право или нет, и в соответствии с этим сами будут выбирать дальнейшее поведение. Например, может существовать право "запустить", означающее, что пользователь имеет право запускать программу. Тогда программа может использовать API, чтобы определить имеется ли действительное (и корректно привязанное, и с неистекшим временем использования) право на запуск программы. Однако если вызов API вернул сообщение, что не существует права запускать программу, программа сама решает отклонить выполнение или совершить какое-либо другое действие, основанное на том, что данное право не существует.

Право может быть связано с информацией, которая становится доступной после успешного вызова метода "использовать право". Например, программа может иметь отдельные правила о том, когда разрешено редактировать, печатать, сохранять и т.д., и эти правила могут храниться в лицензии, содержащей соответствующее право. API предоставляет метод "получить информацию", который позволяет извлекать такую информацию из лицензий.

Другие отличительные особенности изобретения описаны ниже.

Краткое описание чертежей

Предшествующее краткое описание, так же как и последующее подробное описание предпочтительных воплощений, легче понимать, если при чтении пользоваться прилагаемыми чертежами. Для иллюстрации изобретения, на чертежах показаны примеры реализации изобретения; однако изобретение не ограниченно этими частными методами и средствами. На чертежах:

Фиг.1 - структурная схема примера вычислительной среды, в которой может быть реализовано изобретение.

Фиг.2 - структурная схема архитектуры, в которой система выполняет функции лицензирования и предоставляет API программным продуктам.

Фиг.3 - блок-схема способа, посредством которого программа использует API лицензирования.

Фиг.4 - блок-схема способа, посредством которого программа использует право; и

Фиг.5 - блок-схема способа, посредством которого программа получает информацию, относящуюся к используемому праву.

Осуществление изобретения

Обзор

Использование коммерческого программного обеспечения обычно определяется лицензиями, и сейчас стало широко распространено реализовывать такие лицензии в электронной форме, которая может использоваться программным обеспечением для поддержки принудительного исполнения условий лицензии. Для создания системы электронного лицензирования необходимы средства, управляющие использованием лицензий. Дублирование этих средств в каждом программном продукте обременительно и неэкономно. Настоящее изобретение предлагает API, который позволяет различным программным продуктам использовать общую инфраструктуру средства, которая выполняет различные функции, связанные с лицензированием.

Пример вычислительной конфигурации

Фиг.1 показывает пример вычислительной среды, в которой может быть реализовано настоящее изобретение. Эта вычислительная среда 100 является только примером подходящей вычислительной среды и не имеет целью указать какие-либо ограничения на область применения или функциональные возможности настоящего изобретения. Не следует также считать, что вычислительная среда 100 имеет какую-либо зависимость от или требования к какому-либо компоненту или комбинации компонентов, показанных на этом примере вычислительной среды 100.

Изобретение применимо к множеству других общего или специального назначения сред вычислительных систем или конфигураций. Примеры хорошо известных вычислительных систем, сред, и/или конфигураций, которые подходят для использования с изобретением, включают, но не сводятся только к ним: персональные компьютеры, серверные компьютеры, ручные или портативные устройства, многопроцессорные системы, микропроцессорные системы, телевизионные приставки, программируемая потребительская электроника, сетевые персональные компьютеры, миникомпьютеры, универсальные вычислительные машины (mainframe computers), встроенные системы, распределенные вычислительные среды, которые включают в себя любые из вышеперечисленных систем или устройств, и тому подобное.

Изобретение может быть описано в общем контексте машиноисполнимых команд, таких как программные модули, исполняемые компьютером. В общем, программные модули включают процедуры, программы, объекты, компоненты, структуры данных, и т.д., которые выполняют определенные задачи или реализуют определенные абстрактные типы данных. Изобретение может также применяться в распределенных вычислительных средах, где задачи выполняются удаленными обрабатывающими устройствами, которые взаимосвязаны посредством сети связи или посредством других средств передачи данных. В распределенных вычислительных средах программные модули и другие данные могут находиться как на локальных, так и на удаленных компьютерных средствах хранения информации, включающих в себя запоминающие устройства.

На Фиг.1 изображен пример системы для реализации изобретения. Эта система включает в себя вычислительное устройство общего назначения в форме компьютера 110. Компоненты компьютера 110 могут включать в себя, но не в ограничительном смысле: процессорное устройство 120, системную память 130 и системную шину 121, которая связывает различные компоненты системы, в том числе системную память и процессорное устройство 120. Процессорное устройство 120 может состоять из нескольких логических процессорных устройств, например таких, которые поддерживаются на многопоточных процессорах. Системная шина 121 может иметь структуру различных типов, в том числе шину памяти или контроллер памяти, периферийную шину и локальную шину, имеющие любые виды архитектур. В качестве примера, но не ограничения, такие архитектуры включают в себя шины стандартной промышленной архитектуры (ISA), шины микроканальной архитектуры (MCA), шины расширенной архитектуры ISA (EISA), локальные шины стандарта VESA (Ассоциация по стандартам в области видеоэлектроники), шины соединения периферийных устройств (PCI), также известные как шины расширения (Mezzanine bus). Системная шина 121 может также быть реализована как двухточечное соединение, коммутируемая структура (switching fabric) и другими подобными коммуникационными устройствами.

Компьютер 110 обычно содержит набор читаемых компьютером носителей информации. Читаемые компьютером носители информации могут быть любыми носителями информации, к которым может обращаться компьютер 110, и они включают в себя как энергозависимые, так и энергонезависимые носители информации, как съемные, так и стационарные носители информации. В качестве примера, но не ограничения, компьютерные носители информации могут включать в себя компьютерные носители информации и средства связи. Компьютерные носители информации включают как энергозависимые, так и энергонезависимые носители, как съемные, так и стационарные носители, реализованные любым методом или технологией для хранения информации, такой как машинные команды, структуры данных, программные модули или другие данные. Компьютерные носители информации включают в себя, но не в ограничительном смысле, оперативное запоминающее устройство (ОЗУ, RAM), постоянное запоминающее устройство (ПЗУ, ROM), электрически-стираемое программируемое ПЗУ (EEPROM), флэш-память или другую технологию памяти, постоянное запоминающее устройство на компакт-диске (CDROM), универсальный цифровой диск (DVD) или другие оптические дисковые накопители, магнитные кассеты, магнитную ленту, магнитный дисковый накопитель или другие магнитные запоминающие устройства, или любые другие средства, которые могут применяться для хранения необходимой информации, к которым компьютером 110 может быть осуществлен доступ. Средства связи обычно реализуют машинные команды, структуры данных, программные модули или другие данные в виде модулированных сигналов данных, таких как несущая или другой транспортный механизм, и включают в себя любые средства доставки информации. Термин "модулированный сигнал данных" означает сигнал, у которого одна или более характеристик установлены в определенное состояние или изменены таким образом, чтобы закодировать информацию в этом сигнале. В качестве примера, но не ограничения, средства связи включают в себя проводные средства, такие как проводные сети или прямые проводные соединения, и беспроводные средства, такие как акустические, высокочастотные (RF), инфракрасные и другие беспроводные средства. Комбинации всего вышеперечисленного следует также включить в область компьютерных носителей информации.

Системная память 130 включает в себя компьютерные запоминающие средства в форме энергозависимой и/или энергонезависимой памяти, такие как постоянное запоминающее устройство (ROM) 131 и оперативное запоминающее устройство (RAM) 132. Базовая система ввода/вывода 133 (BIOS), содержащая базовые процедуры, которые помогают передавать информацию между элементами внутри компьютера 110, например, в процессе запуска, обычно храниться в ROM 131. RAM 132 обычно содержит данные и/или программные модули, которые непосредственно доступны и/или в текущий момент обрабатываются процессорным устройством 120. В качестве примера, но не ограничения, Фиг.1 показывает операционную систему 134, прикладные программы 135, другие программные модули 136 и программные данные 137.

Компьютер 110 также может включать в себя другие съемные/стационарные, энергозависимые/энергонезависимые компьютерные запоминающие средства. В качестве примера, но не ограничения, Фиг.1 показывает накопитель на жестких дисках 140, который считывает с или записывает на стационарный энергонезависимый магнитный носитель, дисковод магнитных дисков 151, который считывает с или записывает на съемный энергонезависимый магнитный диск 152, и дисковод оптических дисков 155, который считывает с или записывает на съемный энергонезависимый оптический диск 156, такой как CD ROM (постоянное запоминающее устройство на компакт-диске) или другие оптические средства. Другие съемные/стационарные, энергозависимые/энергонезависимые компьютерные запоминающие средства, которые могут быть использованы в примере операционной среды, включают в себя, но не в ограничительном смысле, кассеты с магнитной лентой, платы (карты) с флэш-памятью, цифровые универсальные диски, цифровую видеоленту, твердотельные RAM, твердотельные ROM и т.п. Накопитель на жестких дисках 141 обычно присоединен к системной шине 121 посредством интерфейса стационарной памяти, такого как интерфейс 140, а дисковод магнитных дисков 151 и дисковод оптических дисков 155 обычно присоединены к системной шине 121 посредством интерфейса съемной памяти, такого как интерфейс 150.

Дисководы, накопители и связанные с ними компьютерные запоминающие средства, рассмотренные выше и показанные на Фиг.1, позволяют хранить машинные команды, структуры данных, программные модули и другие данные для компьютера 110. Например, на Фиг.1 показано, что на жестком диске 141 хранятся операционная система 134, прикладные программы 135, другие программные модули 136 и программные данные 137. Операционная система 144, прикладные программы 145, другие программные модули 146 и программные данные 147 обозначены на чертеже другими ссылочными позициями, чтобы показать, что, как минимум, они являются другими копиями. Пользователь может вводить команды и информацию в компьютер 20 посредством устройств ввода, таких как клавиатура 162 и указательное устройство 161, которое обычно является мышью, шаровым манипулятором или сенсорной панелью. Другими устройствами ввода (не показаны) могут быть микрофон, рычажный указатель (джойстик), игровой планшет, спутниковая параболическая антенна, сканнер и другие. Эти и другие устройства ввода часто присоединяются к процессорному устройству 120 с помощью интерфейса пользовательского ввода 160, который присоединен к системной шине, но могут подсоединяться с помощью других интерфейсов или каналов передачи информации (шин) другой структуры, таких как параллельный порт, игровой порт или универсальная последовательная шина (USB). Монитор 191 или устройство отображения другого типа также подсоединены к системной шине 121 через интерфейс, такой как видеоинтерфейс 190. В дополнение к монитору компьютеры могут также включать в себя другие периферийные устройства вывода, такие как громкоговорители 197 и принтер 196, которые могут быть подсоединены через периферийный интерфейс вывода 195.

Компьютер 110 может работать в сетевой среде, использующей логические соединения с одним или более удаленными компьютерами, такими как удаленный компьютер 180. Удаленный компьютер 180 может быть персональным компьютером, сервером, маршрутизатором, сетевым персональным компьютером, равноправным устройством или другой обычным сетевым узлом и обычно содержит многие или все элементы, описанные выше касательно компьютера 110, хотя на Фиг.1 показано только запоминающее устройство 181. Логические соединения, показанные на Фиг.1, включают в себя локальную сеть (LAN) 171 и глобальную сеть (WAN) 173, но могут также включать в себя другие сети. Такие сетевые среды являются обычным явлением в учреждениях, компьютерных сетях масштаба предприятия, во внутренних сетях (intranets) и в Интернете.

Когда компьютер 110 используется в среде локальной сети, он подсоединяется к локальной сети LAN 171 посредством сетевого интерфейса или адаптера 170. Когда компьютер 110 используется в среде глобальной сети, он обычно имеет модем 172 или другие средства для установки соединения через глобальную сеть WAN 173, такую как Интернет. Модем 172, который может быть внутренним или внешним, может подсоединяться к системной шине 121 посредством интерфейса пользовательского ввода 160 или другого подходящего механизма. В сетевой среде программные модули, изображенные в связи с компьютером 110 или его частями, могут храниться на удаленном запоминающем устройстве. В качестве примера, и не ограничения, FIG. 1 показывает удаленные прикладные программы 185, постоянно находящиеся на запоминающем устройстве 181. Важно принять во внимание, что показанные сетевые соединения являются лишь примерами и для установления линий каналов связи между компьютерами могут быть использованы другие средства.

Сервис лицензирования программного обеспечения

На Фиг.2 показан пример системы, которая предоставляет сервис 202 лицензирования программного обеспечения. Сервис 202 лицензирования программного обеспечения функционирует внутри компьютера 110 (показанного на Фиг.1). В одном примере сервис 202 лицензирования программного обеспечения является частью операционной системы, которая выполняется на компьютере 110. Сервис лицензирования программного обеспечения имеет хранилище 204 лицензий, в котором хранятся файлы лицензий для программных продуктов. Файлы лицензий могут, например, быть файлами, написанными на языке расширяемый язык описания прав XrML (eXtensible Rights Markup Language), в которых описаны права в отношении программных продуктов, и в которых также могут описываться различные типы условий в отношении применения этих прав. Программные средства 204 также содержат доверенное хранилище 206. Доверенное хранилище 206 сохраняет информацию, на которую невозможно влиять напрямую, и которая является динамически сохраняемыми данными, защищенными от несанкционированного вмешательства; доверенное хранилище 206 сохраняет информацию, которая используется в процессе проверки действительности лицензии. Например, определенные лицензии могут иметь срок окончания действия, и для того чтобы не дать обойти это условие с помощью перевода часов назад, можно периодически записывать текущее время (и истекшее время) в доверенное хранилище 206, чтобы знать, что часы все время идут вперед.

Сервис 202 лицензирования программного обеспечения управляет хранилищем 204 лицензий и доверенным хранилищем 206, а также выполняет различные функции, связанные с лицензированием программных продуктов. Например, сервис 202 лицензирования программного обеспечения может содержать модули, которые анализируют файлы лицензий, модули, которые контролируют привязку лицензий к конкретной машине и/или к конкретным копиям программных продуктов и к надежному таймеру/счетчику (который использует доверенное хранилище 206 способом, описанным выше).

Сервис 202 лицензирования программного обеспечения предоставляет интерфейс 208 прикладного программирования (API), который позволяет прикладным программам (таким как приложение 135) пользоваться сервисом 202 лицензирования программного обеспечения. Приложение 135 может использовать возможности сервиса 208 лицензирования программного обеспечения посредством обращения к методам из API 208, используя локальный вызов процедуры (LPC, local procedure call). Пример набора API методов, которые могут предоставляться сервисом 202 лицензирования программного обеспечения, описывается ниже.

Способ использования API 208 приложениями описывается с использованием Фиг.3. Сначала приложение выполняет API вызов (302). Затем сервис 202 обрабатывает (304) этот API вызов и возвращает результат этого API вызова приложению 306. Например, API вызов может запросить применить ("использовать") какое-либо право, содержащееся в лицензии, или запросить извлечь информацию из лицензии. Приложение затем получает результат API вызова и определяет, основываясь на этом результате, какое следует выбрать поведение (308). Другими словами, в предпочтительном воплощении, сервис 202 лицензирования программного обеспечения не навязывает непосредственно принудительное исполнение условий лицензии, а скорее предоставляет средства, с помощью которых лицензии могут быть организованны и использованы. Например, если приложение выполняет API вызов, чтобы использовать какое-либо право, и сервис 202 определяет, что не существует действительной лицензии, дающей это право, то сервис 202, в предпочтительном воплощении, не препятствует работе приложения, а вместо этого информирует это приложение, что соответствующее право не существует. Таким образом, приложение может использовать свои собственные механизмы, чтобы определить, что делать в ответ на то, что право не существует. Это свойство описываемого API предоставляет производителям программного обеспечения гибкость в решении как следует использовать средства лицензирования, предоставляемые сервисом 202. В другом воплощении приложение может зависеть от функциональности сервиса лицензий.

Пример API для лицензирования программного обеспечения

Ниже следует пример набора API методов, которые могут предоставляться сервисом лицензирования программного обеспечения (SL):

SLOpen

Функция SLOpen открывает описатель контекста клиента сервиса лицензий (SL клиента), который должен использоваться во всех дальнейших SL API вызовах (Во всем описании примера API SL указывает на сервис лицензирования программного обеспечения. Так описатель контекста SL клиента - это описатель, используемый клиентом при каждом обращении к сервису лицензирования программного обеспечения).

HRESULT

SLOpen(

CONST GUID* pguidApp,

HSLC* phSLC

);

Параметры

pguidApp

[вход] Указатель на GUID (глобально уникальный идентификатор) приложения, который однозначно идентифицирует приложение. Если этот аргумент равен NULL, то возвращается ошибка E_INVALIDARG.

phSLC

[выход] Описатель контекста SL клиента или INVALID_HANDLE_VALUE в случае неудачи.

Замечания

Чтобы закрыть описатель контекста, возвращенный функцией SLOpen, надо использовать SLClose.

GUID приложения - это уникальный ID (идентификатор) приложения. В наборе программ MICROSOFT OFFICE версии для WINDOWS, WinWord имеет GUID приложения, отличающийся от GUID приложения, принадлежащего Excel. Для Windows, Windows само является приложением, хотя оно является комбинацией из многих программ.

Пользователь может установить одновременно продукт Office и отдельный продукт WinWord на одной машине. С точки зрения сервиса лицензий программа WinWord в обоих продуктах имеет один и тот же GUID приложения. GUID приложения программы WinWord ассоциирован с двумя GUID продуктов. Другими словами, WinWord может использовать либо лицензию продукта Office, либо лицензию продукта WinWord.

При успешном вызове SLOpen:

Устанавливается RPC связывание. (RPC - удаленный вызов процедуры).

Сервисом лицензий выделяется память для контекста. Этот контекст используется, чтобы хранить информацию о состоянии вызывающего клиента.

Описатели контекста SL клиентов аналогичны описателям файлов. Процесс может открывать множество описателей контекста SL клиента, но описатели имеют смысл только в вызывающем процессе.

Возвращает

Успех или неудачу.

SLClose

Функция SLClose закрывает открытый описатель контекста SL клиента. Любая информация в контексте автоматически сбрасывается.

HRESULT

SLClose(

HSLC hSLC

);

Параметры

hSLC

[вход] Описатель текущего описателя контекста SL клиента.

Замечания

Когда SLClose завершается, RPC связывание сбрасывается и соответствующий контекст разрушается.

Возвращает

Успех или неудачу.

SLInstall

Функция SLInstall устанавливает лицензии приложений и регистрирует информацию приложений.

HRESULT

SLClose(

HSLC hSLC,

CONST SL_PRODKEY* pAppPrdKey,

DWORD dwNumOfApps,

CONST GUID* pguidApps,

DWORD dwNumOfLicFiles,

PCWSTR ppszLicFiles[],

BOOL bVerify

);

Параметры

hSLC

[вход] Описатель текущего описателя контекста SL клиента.

pAppPrdKey

[вход] Структура ключа программного продукта. Ключ программного продукта может иметь формат ключа продукта Майкрософт (MS) или формат ключа, определяемый приложением.

Typedef struct _tagSL_PRODKEY

{

DWORD cbSize; // Размер структуры SL_PRODKEY

DWORD dwVersion; // Версия структуры SL_PRODKEY

WCHAR szProdKey[MAX_PRODKEYSTR_SIZE+1];

SL_PRODKEY_TYPE eProdKeyType; // Тип ключа программного продукта

SL_CUSTOM_PRODKEY_INFO CustomPrdKeyInfo; // Информация о ключе продукта

} SL_PRODKEY;

Величина eProdKeyType может иметь одно из следующих значений:

SL_PRODKEY_CUSTOM

SL_PRODKEY_MS2002

SL_PRODKEY_MS2003

Если тип ключа продукта не является MS ключом продукта (то есть eProdKeyType=SL_PRODKEY_CUSTOM), то вызывающее приложение должно предоставить информацию о ключе продукта. Если приложение использует ключ продукта MS типа, то параметр CustomPrdKeyInfo можно игнорировать.

Typedef struct _tagSL_CUSTOM_PRODKEY_INFO

{

DWORD dwSKUID; // Уникальный ID для определенного SKU, например ID группы в MS PID.

DWORD dwSerialNumber; // Уникальный серийный номер, например, канал+последовательный номер в MS PID.

} SL_CUSTOM_PRODKEY_INFO;

Для SL_PRODKEY текущий номер версии равен 1. Вызывающая программа может использовать SL_CURRENT_PRODKEY_VERSION в поле dwVersion.

dwNumOfApps

[вход] Количество GUID приложений в pguidApps.

pguidApps

[вход] Список GUID приложений. GUID приложения представляет приложение, для которого устанавливается лицензия. Например, программа для установки Office может вызывать эту функцию, чтобы установить лицензию/лицензии для Word, Excel, указывая каждый GUID приложения в pguidApps. pguidApps не может здесь равняться NULL.

dwNumOfApps

[вход] Количество файлов лицензий.

ppszLicFile

[вход] Имена файлов в массиве строк.

Возвращает

Успех или неудачу.

SLUninstall

Функция SLUninstall удаляет лицензию продукта из приложения.

HRESULT SLUninstall (

HSLC hSLC,

CONST SL_PRODKEY* pAppPrdKey

);

Параметры

hSLC

[вход] Описатель текущего описателя контекста SL клиента.

pAppPrdKey

[вход] Определение приведено выше в связи с функцией SLInstall.

Замечания

Приложение может иметь более чем одну лицензию. Например, когда пользователь деинсталлирует пакет Office, ассоциацию между лицензиями для Office и WinWord следует удалить, однако лицензию отдельного продукта WinWord удалять не следует.

Если функция успешно завершается, то:

Информация, связанная с данным ключом продукта, удаляется (см. описание функции SLInstall выше для соответствующей информации).

Ключ продукта, ассоциированный с GUID приложения, удаляется.

Файлы лицензий, ассоциированные с этим GUID продукта, предпочтительно сохраняются.

Возвращает

Успех или неудача.

SLConsumeRight

Функция SLConsumeRight дает возможность приложениям проверять или использовать права, хранящиеся в локальных лицензиях. При вызове этой функции происходит связывание лицензии и права, на которое указывает pszRightName. Если это право не может быть использовано вызывающим приложением, тогда приложение отказывает в соответствующем действии. Если функция завершается успехом, то могут быть выполнены действия, связанные с этим правом (как, например, уменьшение счетчика использований, уменьшение временной квоты, или никаких действий не выполняется).

HRESULT SLConsumeRight(

HSLC hSLC,

PCWSTR pszRightName,

SL_ASYNC_CONTEXT* pAsyncContext

);

Параметры

hSLC

[вход] Описатель текущего описателя контекста SL клиента.

pszRightName

[вход] Имя права, которое нужно обработать. В настоящем исполнении имя права определяется приложениями. Сервис лицензий открывает лицензию и обрабатывает условие, определяемое именем права.

pAsyncContext

[вход/выход] Если pAsyncContext равен NULL, то функция работает в синхронном режиме, в противном случае функция работает в асинхронном режиме. SL_ASYNC_CONTEXT не видна вызывающей программе и управляется сервисом лицензий.

Замечания

Все лицензии, связанные с GUID приложения (определенном в SLOpen), будут концептуально объединены в одной логической лицензии.

Если имеется несколько лицензий, предоставляющих запрошенное право, то первой будет выбрана лицензия с наивысшим приоритетом.

Возвращает

Успех или неудачу.

SLInitializeAsyncContext

Функция SLInitializeAsyncContext инициализирует асинхронный контекст, чтобы функции сервиса лицензий могли делать асинхронные вызовы.

HRESULT SLInitializeAsyncContext(

SL_ASYNC_CONTEXT* pAsyncContext, // асинхронный контекст

HANDLE hEvent, // описатель события

PVOID pvReserved // резервный, NULL

);

Параметры

pAsyncContext

[вход/выход] указатель на асинхронный контекст, который содержит информацию для асинхронных вызовов.

hEvent

Объект события, используемый для синхронизации.

pvReserved

[вход] зарезервирован для расширения.

Возвращает

Успех или неудачу.

SLCancelAsyncCall

Функция SLCancelAsyncCall используется, чтобы отменить асинхронный вызов.

HRESULT SLCancelAsyncCall(

SL_ASYNC_CONTEXT* pAsyncContext, // асинхронный контекст

BOOL fAbortCall // немедленная отмена

);

pAsyncContext

[вход] асинхронный контекст для SL асинхронного вызова.

fAbortCall

[вход] Если TRUE, то вызов отменяется немедленно. Если FALSE, то ждет пока SL закончит вызов.

Замечания

Есть два способа для вызывающей программы потребовать отменить асинхронный вызов - прерывающий и непрерывающий. В случае прерывающей отмены (fAbortCall равен TRUE) функция SLCancelAsyncCall посылает уведомление сервису лицензий об отмене и асинхронный вызов немедленно отменяется без ожидания ответа от сервиса лицензий. В случае непрерывающей отмены (fAbortCall равен FALSE) функция SLCancelAsyncCall сообщает сервису лицензий об отмене и вызывающая программа ждет когда сервис лицензий завершит вызов.

Возвращает

Успех или неудачу.

SLCompleteAsyncCall

Функция SLCompleteAsyncCall используется, чтобы завершить SL асинхронный вызов.

HRESULT SLCompleteAsyncCall(

SL_ASYNC_CONTEXT* pAsyncContext, // асинхронный контекст

HRESULT* phrAsyncCall // ошибочный код сделанного асинхронного вызова

);

Параметры

pAsyncContext

[вход] асинхронный контекст для SL асинхронного вызова.

phrAsyncCall

[выход] код ошибки сделанного асинхронного вызова.

Замечания

Если программа вызывает эту функцию перед тем как придет ответ, то вызов возвращает E_SLC_ASYNC_CALL_PENDING. Буферный регистр должен быть действующим и быть достаточно большим, чтобы принять возвращенное значение. Если вызов не возвращает E_SLC_ASYNC_CALL_PENDING, то этот запуск SLCompleteAsyncCall конечный для асинхронного вызова. После вызова этой функции, независимо успешного или неудачного, все ресурсы, предназначенные для этого асинхронного вызова, освобождаются. (Последующие вызовы функций SLCompleteAsyncCall или SLCancelAsyncCall имеют неопределенные результаты до тех пор, пока не будет инициализирован новый вызов структуры SL_ASYNC_CONTEXT).

Возвращает

Значение Значение
S_OK Вызов был успешно завершен
E_SLC_INVALID_ASYNC_CONTEXT Недопустимый контекст асинхронного вызова
E_SLC_ASYNC_CALL_PENDING Вызов еще не завершился
E_SLC_CALL_CANCELLED Вызов был отменен

SLGetInformation

Функция SLGetInformation используется, чтобы получать разнообразную информацию.

HRESULT SLGetInformation(

HSLC hSLC, // Описатель контекста SL клиента

DWORD dwCategory, // Категория информации, которую нужно извлечь

PCWSTR pszKeyName, // Имя ключа

DWORD* pdwType, // Тип значения

SIZE_T* pcbValut, // Размер значения

PBYTE* ppbValue // Указатель на буфер значения

);

Параметры

hSLC

[вход] Описатель текущего описателя контекста SL клиента.

dwCategory

[вход] Категория информации.

Категория Значение
SL_CAT_RIGHTDATA Получить информацию из привязанного права. Перед получением этих данных из права лицензия должна быть успешно применена.
SL_CAT_DYNAMICPROPERTY Получить информацию, которая находится не в лицензии, а вычисляется в процессе работы программы. Например, RemainingGracePeriodDays. Это право должно быть получено перед вызовом. Имя ЗначенияRemainingGracePeriodDays: DWORD.Льготный период может быть определен в лицензиях на ограниченное использование. Как только приложение установлено, время льготного использования начинает уменьшаться. Приложения могут проверять оставшееся время льготного использования после того как они получили соответствующую лицензию. ActivationStatus: DWORD. После того как приложения получат лицензию, они могут получить тип лицензии. Возвращаемое значение может быть: SL_LIC_OOB. Полученная лицензия - это лицензия на ограниченное использование SL_LIC_ACQUIRED. Полученная лицензия - это добросовестно приобретенная лицензия SL_LIC_NO. NE - лицензии нет
SL_CAT_SERVICEINFO Получить информацию, которая не зависит от лицензии. Вызывающая программа может получить информацию данной категории без обращения к лицензии. ИмяЗначениеSLVersion: DWORD. Версия сервиса лицензий. Формат 1.2.3.4 HWID: BINARY Текущий HWID.
SL_CAN_WINSOWSINFO Получить информацию, которая является свойством права, привязанного к Windows лицензии. Это для компонентного представления. Лицензия Windows уже получена сервисом лицензий, и сервис лицензий хранит свойства связанных с нею прав.
SL_CAT_ENUMLICINFO Когда функция SLEnumLicense вызвана и успешно завершена, вызывающая функция может запросить информацию пронумированной лицензии, используя эту категорию.

pszKeyName

[вход] Имя ключа. Например, BuildNumber

pdwType

[выход] тип данных

Значение Значение
SL_DATATYPE_SZ Строка в Юникоде
SL_DATATYPE_DWORD DWORD
SL_DATATYPE_BINARY Двоичное

pcbValue

[выход] Размер выделенного буфера (в байтах).

ppbValue

[выход] Если вызов успешный, то данные возвращаются в буфере, выделенном SLC. Вызывающее приложение должно вызвать SLFreeMemory, чтобы освободить память.

Возвращает

Успех или неудачу.

SLAcquireLicense

Функция SLAcquireLicense используется, чтобы получить лицензию для пользователя по сети. SLC перенумеровывает ключи продуктов, ассоциированные с приложением, и выбирает ключ продукта с наибольшим приоритетом продукта (см. SLInstall, информацию о регистрации). Затем SL получает из лицензии на ограниченное использование URL организации, распространяющей лицензии, и затем соединяется с этой организацией, чтобы получить лицензию.

Работа SLAcquireLicense может занять долгое время. Приложения могут вызывать эту функцию в асинхронном режиме, используя параметр pAsyncContext (NULL означает синхронный режим).

HRESULT SLAcquireLicense(

HSLC hSLC, // описатель контекста SL клиента

PCWSTR pszProdKeyHash, // хэш ключа продукта

PCWSTR pszPublishLicense, // строка издательской лицензии

SL_ASYNC_CONTEXT* pAsyncContext

);

Параметры

hSLC

[вход] Описатель текущего описателя контекста SL клиента.

pszProdKeyHash

[вход] строка хэша ключа продукта. Хэш ключа продукта создается при вызове SLInstall и поддерживается сервисом лицензий.

pszPublishingLicense

[вход] строка издательской лицензии

pAsyncContext

[вход] Асинхронный контекст для SL асинхронного вызова.

Замечания

Полученная лицензия будет храниться в хранилище лицензий, соответственно, и информация лицензии также будет зарегистрирована (см. SLInstall).

Приложениям может потребоваться добавить больше клиентской информа