用于管理许可的编程接口的制作方法

文档序号:6435037阅读:191来源:国知局
专利名称:用于管理许可的编程接口的制作方法
技术领域
本发明一般涉及计算机软件领域,更具体地说,涉及一种支持实施电子许可证的编程接口。
背景技术
传统上,为商业目的而生产的软件在许可证之下一直可用,该许可证定义可容许的该软件的使用条款。当首先开始实行软件许可时,该许可证通常采取定义过该用户在该软件方面的权利的法律文档的形式。这种文档依靠该用于实施的法律系统。后来,变得需要用电子学方法来实施许可证——即,需要计算机程序包含按与该许可证相反的方式来主动地阻碍或防止该软件的运用的代码。
规定电子许可证实施的大多数软件提供其自己的基础结构,来管理该软件的许可和这些许可证的运用。这样,典型的商业软件产品不仅可能包括用于执行该产品的核心功能的代码,而且也可能随之携带用于获得、评估、保护和管理关于该软件的许可证的那个代码。对于每位软件商而言,开发这种基础结构并将它并入其软件常常是重复劳力、浪费精力。所以,需要提供一种执行与软件许可有关的基本功能的系统,其中,该系统可以由众多不同的软件应用按统一、定义的方法来加以使用。
鉴于前述内容,需要一种克服原先技术的这些缺点的机制。
发明概述本发明提供了一种软件许可“应用编程接口”(API),该软件许可“应用编程接口”提供某些许可功能,供软件产品使用。许可证服务执行涉及该许可证运用的功能,并通过该API来向软件产品揭示这些功能。该服务执行各种功能,例如获得许可证;存储和管理许可证;保护许可证不受到篡改;评估许可证的有效性;以及评估许可证是否正确地与机器其在该机器和/或上面使用的软件产品结合。该软件能够通过调用该API的各种方法来使用这个功能性。
在该API的典型运用中,软件产品调用“开放的”API方法,以获得被该许可证服务用来识别该应用程序的唯一句柄。然后,该软件产品调用“消费权利”API方法。在此上下文中,“消费”意味着规定权利的运用。由该软件产品的句柄并以待消费的该权利的名义来用参数表示对该“消费权利”方法的调用。然后,该许可证服务尝试定位包含该指定权利的一个或多个有效的、被正确结合的许可证。如果不存在这种许可证,那么,向该软件产品通知失败。如果存在这类许可证,那么,将该权利与这些许可证中的一个许可证结合,并且向该调用软件产品通知该结合。在这种情况下,该软件产品知道该权利存在,并且可以执行与这项权利关联的无论什么功能。
在较佳实施例中,该许可证服务不定义该软件在该权利之下能够或不能做什么,也不对该软件的运用实施实质性的约束。相反,该许可证服务按软件产品可以通过调用该API来确定权利存在与否的这样一种方法来管理这些许可证,以便该软件可以相应地运作。例如,权利可以被称作“运行”,从而指出该用户有权运行该软件产品。该软件产品可以使用该API来确定是否有有效的(和被正确结合的、以及未到期的)权利来运行该软件。但是,如果该API调用返回——指出没有权利来运行该软件,则该由该软件根据这项权利的不存在来停止操作或采取某种其他的行动。
权利可能与信息关联,在对该“消费权利”方法进行成功调用之后,它才变得可用。例如,给定的软件产品可能具有关于“何时可容许进行编辑、打印、保存等”的单独的规则,并且,这些规则可以被存储在包含该权利的那个许可证中。该API提供“获得信息”方法,该方法允许从该许可证中检索该信息。
以下描述本发明的其他特点。
附图简述当连同附图来阅读时,可以更好地理解前面的概述、以及较佳实施例的以下详述。出于展示本发明的目的,这些附图表现了本发明的示范构造;但是,本发明不局限于所揭示的这些特殊的方法和工具。在这些附图中


图1是可以在其中执行本发明的各个方面的范例计算环境的框图;图2是一种体系结构的框图,在该体系结构中,系统执行许可功能,并揭示供软件产品使用的API;图3是一种方法的流程图,软件产品通过该方法来使用许可API;图4是一种方法的流程图,软件产品通过该方法来消费权利;以及,图5是一种方法的流程图,软件产品通过该方法来检索涉及被消费的权利的信息。
发明详述纵览商业软件的运用通常受到许可证的控制,并且,用可以由该软件本身实施的电子形式来具体表现该许可证已变得日益普通。创建电子许可系统的过程中的一个应答是需要基础结构来管理这些许可证的运用。为每个软件产品复制该基础结构既麻烦、又浪费。本发明提供API,该API允许不同的软件产品使用执行各种许可功能的共同的基础结构。
示范计算布置图1表现了可以在其中执行本发明的各个方面的示范计算环境。计算系统环境100只是合适的计算环境的一个例子,它并不意在对本发明的使用或功能性的范围提出任何限制。也不应该将计算环境100解释为具有涉及示范操作环境100中所展示的任何一个部件或部件组合的任何从属性或要求。
本发明可用于众多其他的通用或专用计算系统环境或配置。可能适用于本发明的众所周知的计算系统、环境和/或配置的例子包括(但不局限于)个人计算机、服务器计算机、手持设备或便携式设备、多处理器系统、基于微处理器的系统、机顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、嵌入式系统、包括以上任何系统或设备的分布式计算环境,以及类似物。
可以在正由计算机执行的计算机可执行指令(例如,程序模块)的一般上下文中描述本发明。通常,程序模块包括执行特殊任务或实施特殊的抽象数据类型的例行程序、程序、对象、部件、数据结构等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络或其他数据传输介质而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块和其他数据可以位于包括记忆存储设备的本地计算机存储介质和远程计算机存储介质中。
参照图1,用于执行本发明的示范系统包括采取计算机110的形式的通用计算设备。计算机110的部件可能包括(但不局限于)处理单元120、系统存储器130和系统总线121,系统总线121将包括该系统存储器的各种系统部件耦合到处理单元120。处理单元120可能表示多个逻辑处理单元(例如,多线程处理器上所支持的那些逻辑处理单元)。系统总线121可以是几种类型的总线结构(包括存储总线或存储控制器、外围总线和使用各种总线构造中的任何总线构造的局域总线)中的任何总线结构。举例来讲(不作限制),这类结构包括“工业标准结构”(ISA)总线、“微通道结构”(MCA)总线、“增强型ISA”(EISA)总线、“视频电子标准协会”(VESA)局域总线和“外围部件互连”(PCI)总线(也被称作“夹层(Mezzanine)总线”)。系统总线121也可能作为这些通信设备之中的点到点连接、交换结构或类似物来加以执行。
计算机110通常包括各种计算机可读介质。计算机可读介质可以是可由计算机110存取的任何可用介质,它包括易失和非易失性介质、可移动和不可移动的介质。举例来讲(不作限制),计算机可读介质可能包括计算机存储介质和通信介质。计算机存储介质包括易失和非易失性的可移动和不可移动的介质,该介质用关于信息(例如,计算机可读指令、数据结构、程序模块或其他数据)存储的任何方法或技术来加以执行。计算机存储介质包括(但不局限于)RAM、ROM、EEPROM、快闪存储器或其他存储技术、CDROM、数字通用光盘(DVD)或其他光盘存储器、盒式磁带、磁带、磁盘存储器或其他磁性存储设备、或可以被用来存储所需信息并可以由计算机110来进行存取的其他任何介质。通信介质通常具体表现计算机可读指令、数据结构、程序模块或调制数据信号(例如,载波或其他传送机制)中的其他数据,它包括任何信息传递介质。术语“调制数据信号”意味着一种信号,其一个或多个特征按为该信号中的信息编码的这样一种方式来加以设置或更改。举例来讲(不作限制),通信介质包括有线介质(例如,有线网络或直线连接)和无线介质(例如,声音、RF、红外线和其他无线介质)。以上任何内容的组合也应该被包括在计算机可读介质的范围以内。
系统存储器130包括采取易失和/或非易失性存储器(例如,只读存储器(ROM)131和随机存取存储器(RAM)132)的形式的计算机存储介质。基本输入/输出系统133(BIOS)通常被存储在ROM 131中,该基本输入/输出系统包含有助于在计算机110内的各个元件之间传送信息(例如,在启动期间)的这些基本例行程序。RAM 132通常包含可立即由处理单元120存取并且/或者目前正由处理单元120进行操作的数据和/或程序模块。举例来讲(不作限制),图1展示了操作系统134、应用程序135、其他程序模块136和程序数据137。
计算机110也可能包括其他可移动/不可移动的易失/非易失性计算机存储介质。只举例来讲,图1展示了从不可移动的非易失性磁性介质读取或对其写入的硬盘驱动器140、从可移动的非易失性磁盘152读取或对其写入的磁盘驱动器151,以及从可移动的非易失性光盘156(例如,CD ROM或其他光学介质)读取或对其写入的光盘驱动器155。可以被用于该示范操作环境中的其他可移动/不可移动的易失/非易失性计算机存储介质包括(但不局限于)卡型盒式磁带机、快闪存储卡、数字通用光盘、数字录像带、固态RAM、固态ROM和类似的存储介质。硬盘驱动器141通常通过不可移动的存储接口(例如,接口140)而被连接到系统总线121,磁盘驱动器151和光盘驱动器155通常由可移动的存储接口(例如,接口150)连接到系统总线121。
以上所讨论的和图1中所展示的这些驱动器及其关联的计算机存储介质为计算机110提供计算机可读指令、数据结构、程序模块和其他数据的存储。在图1中,例如,硬盘驱动器141被展示为存储操作系统144、应用程序145、其他程序模块146和程序数据147。注意,这些部件可以等同于或不同于操作系统134、应用程序135、其他程序模块136和程序数据137。这里为操作系统144、应用程序145、其他程序模块146和程序数据147提供不同的号码,以展示它们至少是不同的副本。用户可以通过输入设备(例如,键盘162和通常被称作“鼠标”、“跟踪球”或“触摸垫”的指点设备161),来将命令和信息输入计算机20。其他输入设备(未示出)可能包括话筒、操纵杆、游戏垫、圆盘式卫星电视天线、扫描仪或类似的输入设备。这些和其他的输入设备经常通过被耦合到该系统总线的用户输入接口160而被连接到处理单元120,但也可能由其他接口和总线结构(例如,并行端口、游戏端口或通用串行总线(USB))来加以连接。监视器191或其他类型的显示设备也经由接口(例如,视频接口190)而被连接到系统总线121。除该监视器以外,计算机也可能包括其他外围输出设备(例如,扬声器197和打印机196),这些外围输出设备可以通过输出外围接口195来加以连接。
计算机110可以在使用与一台或多台远程计算机(例如,远程计算机180)的逻辑连接的联网环境中进行操作。远程计算机180可能是个人计算机、服务器、路由器、网络PC、对等设备或其他共同的网络节点,它通常包括以上相对于计算机110而描述的许多或所有这些元件,尽管图1中只展示了记忆存储设备181。图1中所描绘的这些逻辑连接包括局域网(LAN)171和广域网(WAN)173,但也可能包括其他网络。这类联网环境在办公室、企业范围的计算机网络、内联网和因特网中很普遍。
当被用于LAN联网环境中时,计算机110通过网络接口或适配器170而被连接到LAN 171。当被用于WAN联网环境中时,计算机110通常包括调制解调器172或用于在WAN 173(例如,因特网)上建立通信的其他装置。调制解调器172(可能是内置的,也可能是外置的)可以经由用户输入接口160或其他合适的机制而被连接到系统总线121。在联网环境中,相对于计算机110或其各个部分而描绘的程序模块可以被存储在该远程记忆存储设备中。举例来讲(不作限制),图1将远程应用程序185展示为驻留在存储设备181上。将会理解所示的这些网络连接起示范的作用,可以使用在这些计算机之间建立通信链路的其他装置。
软件许可服务图2表现了提供软件许可服务202的范例系统。软件许可服务202在(图1中所示的)计算机110内进行操作。在一个例子中,软件许可服务202是在计算机110上执行的操作系统的一部分。软件许可服务维持了一个其中存储关于软件的许可证文件的许可证存储器204。例如,许可证文件可能是“可扩展权利标记语言”(XrML)文件,这些文件为软件规定权利,并且也可能规定关于那些权利的运用的各种类型的条件。软件204也维持一委托存储器206。委托存储器206按防篡改的方式来存储不可鉴定的动态数据;委托存储器206存储被用于该许可证证实过程中的数据。例如,某些许可证可能具有截止日期,并且,为了防止通过时钟反转来回避该截止数据,可以将该当前时间(和经过时间)定期存储在委托存储器206中,以确保该时钟始终在前进。
软件许可服务202管理许可证存储器204和委托存储器206,并且也执行涉及该软件许可的各种功能。例如,软件许可服务202可能包含分析许可证文件的模块、实施许可证与特定机器捆绑并且/或者与软件产品的特定实例捆绑的模块、以及安全定时器/计数器(它按以上所描述的方式来使用委托存储器206)。
软件许可服务202揭示了应用编程接口(API)208,应用编程接口208允许应用软件(例如,应用程序135)使用软件许可服务202。应用程序135可以通过对API 208的这些方法实行本地过程调用(LPC),来调用软件许可服务208的这些特点。以下描述可以由软件许可服务202来揭示的范例API方法集。
参照图3来描述应用程序使用API 208的方式。最初,该应用程序实行API调用(302)。然后,服务202处理该API调用(304),并将该API调用的结果返回到应用程序306。例如,API调用可能请求使用(“消费”)许可证中所准予的权利,或者,可能请求从许可证中检索信息。然后,该应用程序接收该API调用的结果,并根据那个结果来确定该应用程序的行为应该是什么(308)。换言之,在较佳实施例中,软件许可服务202不直接实施许可证,而是提供基础结构,可以通过该基础结构来管理和使用许可证。例如,如果应用程序实行API调用来消费权利,并且,服务202确定没有准予这项权利的有效的许可证,那么,在较佳实施例中,服务202不阻止该应用程序运行,而是通知该应用程序该权利不可用。这样,该应用程序可以使用其自己的机制来确定响应于该权利的不可用,要做些什么。该API的这个方面使软件商能够灵活地决定应该如何使用服务202所提供的该许可基础结构。在另一项实施中,应用程序可以功能性地被捆绑到许可服务。
范例软件许可API以下是可以由软件许可服务来揭示的范例API方法集
SLOpen该SLOpen功能打开必须被用于所有随后的SL API调用的SL客户机上下文句柄。(贯穿这些范例API说明,“SL”将指的是该软件许可服务。这样,该SL客户机上下文句柄是与该软件许可服务进行通信的客户机所使用的那个句柄。)HRESULTSLOpen(CONST GUID*pguidApp,HSLC* phSLC);参数pguidApp[入]唯一地识别应用程序的、指向应用程序GUID的指针。如果这个自变量是NULL,则返回E_INVALIDARG错误。
PhSLC[出]如果失败,则SL客户机上下文句柄或INVALID_HANDLE_VALUE。
备注使用该SLClose功能来关闭由SLOpen返回的上下文句柄。
应用程序GUID应用程序的唯一ID。关于该MICROSOFT OFFICE应用套件的WINDOWS版本,WinWord具有与Excel的“应用程序GUID”不同的“应用程序GUID”。关于Windows,Windows本身是应用程序,尽管它是许多程序的合成物。
在Office的情况中,用户可以将Office Suite和WinWord独立产品安装在该机器上。从SL的观点来看,这两个产品中的该WinWord具有相同的“应用程序GUID”。WinWord的“应用程序GUID”与两个“产品GUID”关联。换言之,WinWord可以使用Office Suite的产品许可证或WinWord的产品许可证。
当SLOpen成功时已建立RPC(远程过程调用)捆绑。
在SL服务上创建上下文存储器。该上下文被用来保持关于该客户机的这个调用者的状态信息。
该SLC句柄象是一个文件句柄。过程可以打开多个SL上下文句柄,但句柄在该调用者过程内有效。
返回成功或失败SLClose该SLClose功能关闭被打开的SL客户机上下文句柄。自动释放该上下文中的任何信息。
HRESULTSLClose(HSLC hSLC);参数hSLC[入]到当前的SL客户机上下文句柄的句柄备注当完成SLClose时,释放该RPC捆绑,并销毁该上下文。
返回成功或失败。
SLInstall该SLInstall功能安装应用程序的许可证,并登记应用程序的信息。
HRESULT SLInstall(HSLC hSLC,
CONST SL_PRODKEY* pAppPrdKey,DWORD dwNumOfApps,CONST GUID* pguidApps,DWORD dwNumOfLicFiles,PCWSTR ppszLicFiles[],BOOL bVerify);参数hSLC[入]到当前的SL客户机上下文句柄的句柄pAppPrdKey[入]应用程序产品密钥结构。该产品密钥可以是微软产品密钥格式或“应用程序”的产品密钥格式。
typedef struct_tagSL_PRODKEY{DWORD cbSize; //SL_PRODKEY结构的尺寸DWORD dw Version; //SL_PRODKEY结构的版本WCHAR szProdKey[MAX_PRODKEYSTR_SIZE+1];SL_CUSTOM_PRODKEY_INFO CustomPrdKeyInfo;//顾客产品密钥信息}SL_PRODKEY;该eProdKeyType可以是以下的值之一SL_PRODKEY_CUSTOMSL_PRODKEY_MS2002SL_PRODKEY_MS2003
如果该“产品密钥”类型是“非MS产品密钥”(即,eProdKeyType==SL_PRODKEY_CUSTOM),则该调用者必须填充其顾客产品密钥信息。如果该产品使用“MS产品密钥”,那么,可以忽略CustomPrdKeyInfo。
typedef struct_tagSL_CUSTOM_PRODKEY_INFODWORD dwSKUID; //关于特定SKU的唯一ID,例如MS PID中的组ID.
DWORD dwSerialNumber; //唯一序列号,例如通道+MS PID中的顺序号.
}SL_CUSTOM_PRODKEY_INFO;SL_PRODKEY的当前版本号是1。该调用者可以使用dwVersion领域中的SL_CURRENT_PRODKEY_VERSION。
dwNumOfApps[入]pguidApps中的应用程序GUID的号码。
pguidApps[入]GUID的应用程序清单。该应用程序GUID表示正为其安装该许可证的那个应用程序。例如,通过规定pguidApps中的每个应用程序GUID,“Office设置”程序可以调用这个功能来安装关于Word、Excel的许可证。pguidApp在这里不会是NULL。
dwNumOfApps[入]许可证文件的数量。
ppszLicFile[入]串数组中的文件名。
返回成功或失败SLUninstall该SLUninstall功能从应用程序中卸载产品的许可证。
HRESULT SLUninstall(HSLC hSLC,CONST SL_PRODKEY*pAppPrdKey);参数hSLC[入]到当前的SL客户机上下文句柄的句柄pAppPrdKey[入]见以上关于SLInstall的定义。
备注应用程序可以具有一个以上的产品许可证。例如,当该用户卸载Office套件时,应该除去Office Suite许可证与WinWord之间的关联,但不应该除去来自WinWord独立产品的该许可证。
当SLUninstall成功时除去与这个“产品密钥”关联的信息。(要了解该关联的信息,见以上的SLInstall)除去与该“应用程序GUID”关联的这些产品密钥。
较佳地仍然保持与该产品GUID关联的这些许可证文件。
返回成功或失败
SLConsumeRight该SLConsumeRight功能让应用程序检查或实施被存储在本地的许可证上的这些权利。通过调用这个功能,可将许可证与pszRightName中所述的该权利相结合。如果这项权利无法由该当前调用者来实施,那么,该应用程序失败。如果该功能成功,则可以执行与该权利关联的那个动作(比如减少使用计数、减少时间配额或什么也不做)HRESULT SLConsumeRight(HSLC hSLC,PCWSTR pszRightName,SL_ASYNC_CONTEXT* pAsyncContext};参数hSLC[入]到当前的SL客户机上下文句柄的句柄pszRightName[入]需要被评估的该权利名称。在当前的设计中,该权利名称由应用程序来定义。SL打开该许可证,并根据该权利名称来评估该条件。
pAsyncContext[入/出]如果pAsyncContext是NULL,则这个功能按同步模式来运作,否则,该功能按异步模式来运作。SL_ASYNC_CONTEXT对于调用者而言是不透明的,并由SLC来管理。
备注与(SLOpen中所规定的)该应用程序GUID关联的所有许可证将在概念上被组合在一个逻辑许可证中。
如果有该权利的多个可消费的授予,那么,将首先消费具有较高优先级的那个许可证。
返回成功或失败SLInitializeAsyncContext该SLInitializeAsyncContext功能对关于SLC功能的该异步上下文进行初始化,以实行异步调用。
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功能将取消通知发送到该SLC,并且,立即取消该异步调用,而无须等候来自该SLC的响应。在非中断的取消中(fAbortCall是FALSE),该SLCancelAsyncCall功能向SLC通知该取消,并且,该调用者等候SLC完成该调用。
返回成功或失败。
SLCompleteAsyncCall该SLCompleteAsyncCall功能被用来完成SLC异步调用。
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该SLGetLicenseInfo功能被用来获得各种信息。
HRESULT SLGetInfomation(HSLC hSLC,//SL客户机上下文句柄DWORDdwCategory, //要检索的信息种类PCWSTR pszKeyName, //该密钥的名称DWORD* pdwType, //值的类型SIZE_T* pcbValue, //值的大小
PBYTE*ppbValue //指向值的缓冲器的指针);参数hSLC[入]到当前的SL客户机上下文句柄的句柄dwCategory[入]该信息种类。
种类 含义SL_CAT_RIGHTDATA 从结合的权利中获得该信息。在获得这些权利数据之前,必须成功地消费该许可证。
SL_CAT_DYNAMICPROPERTY获得不在该许可证中的、但在该运行时间进行计算的该信息。例如,RemainingGracePeriodDays。必须在调用之前消费该权利。
SL_CAT_SERVICEINFO获得不依靠许可证的信息。该调用者可以在不消费许可证的条件下获得这种类别的信息。
SL_CAT_WINDOWSINFO获得是Windows许可证中的结合的权利属性的信息。这是用于“部件化”。“Windows许可证”已由SL服务来消费,并且,SL服务保持这些结合的权利属性。
SL_CAT_ENUMLICINFO当SLEnumLicenseis被调用并获得成功时,该调用者可以通过使用这个类别来查询被列举的许可证的信息。
pszKeyName[入]该密钥的名称。例如,BuildNumberpdwType[出]数据类型值含义SL_DATATYPE_SZUnicode(统一的字符编码标准)字符串
SL_DATATYPE_DWORD DWORDSL_DATATYPE_BINARY 二进制pcbValue[出]被分配的缓冲器的尺寸(用字节表示)。
ppbValue[出]如果成功的话,则在由SLC分配的缓冲器中返回该数据。该调用者必须调用SLFreeMemory以释放该存储器。
返回成功或失败SLAcquireLicense该SLAcquireLicense功能被用来为该用户获取在线许可证。SLC列举与该“应用程序”关联的这些产品密钥,并检取具有最高产品优先级的那个产品密钥(见SLInstall,登记信息)。然后,SL从框外许可证中获得该清算中心URL,并与清算中心连接,以获得许可证。
SLAcquireLicense会是一个冗长的过程。通过规定pAsyncContext,应用程序可以按异步模式来调用这个功能(NULL意味着同步模式)。
HRESULT SLAcquireLicense(HSLC hSLC,//SL客户机上下文句柄PCWSTR pszProdKeyHash, //产品密钥的散列值SL_ASYNC_CONTEXT* pAsyncContext//出版许可证的字符串);参数hSLC[入]到当前的SL客户机上下文句柄的句柄
pszProdKeyHash[入]产品密钥散列值的字符串。当SLInstall由该许可服务来调用和维持时,创建该产品密钥散列值。
pszPublishingLicense[入]出版许可证的字符串。
pAsyncContext[入]用于SL异步调用的异步上下文。
备注这个被获取的许可证将被相应地存储在许可证存储器中,并且,该许可证信息也将被登记。(见SLInstall)应用程序可能需要将更多的客户机信息加入许可证。该应用程序可以在该调用中将该信息应用于pbAppData,并且,该数据将被发送到清算中心。
当这个功能成功时它曾将必要的捆绑信息发送到该规定的许可证服务器。
它从许可证服务器接收该许可证。
它曾将该许可证存储在许可证存储器中。关于如何存储该许可证文件,见以上的SLInstall说明。
返回成功或失败。
SLGenerateTextChallenge生成将要以频带外方式(电话、电子邮件、文件共享等)而被发送给许可证发行者的安装应答文本。
HRESULT SLGenerateTextChallenge(HSLChSLC, //SL客户机上下文句柄PCWSTR pszProdKeyHash,//产品密钥散列值的字符串BOOLfSingleSession, //只是单会话?PWSTR *ppszChallenge //用于保持应答文本的、指向缓冲器的指针);参数hSLC[入]到当前的SL客户机上下文句柄的句柄pszProdKeyHash[入]产品密钥散列值的字符串。当SLInstall由该许可服务来调用和维持时,创建该产品密钥散列值。
bSingleSession[入]规定来自该许可证发行的那个对应的文本响应是否将只在这个SLC对话句柄的使用期限内有效。
ppszChallenge[出]如果成功的话,则在由SLC分配的缓冲器中返回该文本应答。该调用者需要调用SLFreeMemory来释放该分配的存储器。
返回成功或失败。
SLDepositTextResponse在该许可系统中存放对安装应答文本的那个响应。被用来激活具有有条件的存取码的许可证。只有当具有已为许可证发行的未完成的文本应答时,才有效。如果该原始许可证曾规定该应答只对单会话而言有效,则在关闭该SLC句柄或对该响应的存放将要失败之前,必须利用该响应来调用这个API。
HRESULT SLDepositTextResponse(HSLC hSLC,//SL客户机上下文句柄PCWSTR pszProdKeyHash,PWSTRpszResponse//包含响应文本的缓冲器);参数hSLC[入]到当前的SL客户机上下文句柄的句柄pszProdKeyHash该产品密钥散列值的字符串pszChallenge[入]响应文本返回成功或失败。
SLEnumLicense该SLEnumLicense功能被用来列举被安装的许可证,并从该许可证中获得信息。
HRESULT SLEnumLicense(HSLC hSLC,//SL客户机上下文句柄CONST GUID*pguidApp,//应用程序GUIDDWORD dwIndex //索引号);
参数hSLC[入]到当前的SL客户机上下文句柄的句柄pguidApp[入]见SLInstall。如果pguidApp不是NULL,那么,列举与这个GUID关联的许可证。如果该GUID是NULL,那么,列举所有的许可证。
dwIndex[入]将要被检索的该许可证的该索引号。对于对该SLEnumLicense功能的第一调用而言,这个值应该是零,然后,对于随后的调用而言,这个值应该递增。
该功能可以按任何顺序来返回许可证。
返回E_SL_NO_MORE_DATA——所规定的索引处无许可证。
备注如果SLEnumLicenses曾获得成功,则所选择的许可证信息可以通过调用SLGetInformation来加以访问,并且,该种类是SL_CAT_ENUMLICINFO示例<pre listing-type="program-listing"><![CDATA[DWORD i=0;PBYTE pbProductPriority=NULL;PBYTE pbRemainingGracePeriodDays=NULL;for(i=0;;i++){ EXIT_ON_ERROR(SLEnumLicense(hSLC,NULL,dwIndex));it(E_SL_NO_MORE_DATA==SCODE(hr)){ hr=S_OK; break;}EXIT_ON_ERROR(SLGetInformation(hSLC,SL_CAT_ENUMLIC,“ProductPriority”&amp;dwType,&amp;cbProductPriority,&amp;pbProductPriority));EXIT_ON_ERROR(SLGetInformation(hSLC,SL_CAT_ENUMLIC,“RemainingGracePeriodDays”,&amp;dwType,&amp;cbRemainingGracePeriodDays,&amp;pbRemainingGracePeriodDays));ExitSLFreeMemory(pbProductPriority);SLFreeMemory(pbRemainingGracePeriodDays); }]]></pre>SLFreeMemory该SLFreeMemory功能被用来释放由SLC分配的存储器。
VOID SLFreeMemory(PVOID pvMemblock, //指向存储器的指针);参数pvMemBlock将要被释放的以前所分配的存储块返回无使用软件许可API来控制软件的使用出于与许可有关的各种目的(包括消费许可证中的权利,以及从该许可证中检索数据),软件产品使用本发明的该API。如上所述,该API允许该软件确定该许可证中存在什么权利,但是,较佳的是,该由该软件来确定如何利用该信息——例如,准予或拒绝对特点的访问、完全停止操作等。图4和图5的以下说明表现了软件产品如何使用本发明的该API。
图4表现了范例过程,应用程序通过该范例过程来“消费”权利。该应用程序调用该SLConsumeRight方法(402)。如上所述,对该SLConsumeRight功能的这些自变量包括由该许可服务分配的客户机句柄、以及该权利的名称(由该权利所属的软件的卖主来分配)。该许可服务(图2中所示的服务202)接收该调用(404)。然后,该服务定位包含该权利的许可证,并检验该许可证的绑定和有效性。如上所述,该许可证位于该许可证存储器中;如果具有一个以上的、关于该SLConsumeRight调用所属的应用软件的许可证,那么,可以使用优先规则来选择这些适用许可证之一。检验该绑定意味着确定(1)该许可证与该客户机句柄所识别的应用程序的该产品密钥相捆绑;以及(2)该许可证与其上运行该软件的那个机器(或与该当前机器是其中的成员的那个机器组)相捆绑。检验有效性可能包括确定该权利还没有到期(在规定截止日期的许可证的情况中)以及没有超过该权利的最多使用次数(在该许可证规定该权利可以被使用(即,“被消费”)的最多次数的情况下)。
如果发现该许可证和/或权利被正确地捆绑并且是有效的(408),那么,该许可证与该API调用中所请求的该权利相捆绑(412)。(应该注意,将许可证与机器、环境和产品密钥“捆绑”意味着该许可证规定它可以被用于哪个(哪些)机器和产品密钥;将许可证与权利“捆绑”意味着该消费功能一直是成功的,并且,正从特定的许可证中消费该权利。贯穿本文,从应用“捆绑”的含义的上下文中,这一点将显而易见。)然后,该API调用返回到该调用应用程序,并指出该调用曾获得成功(414)。如果已发现该许可证和/或权利是无效的或没有正确地与该机器、环境或产品ID相捆绑,那么,该SLConsumeRight调用返回到该调用应用程序,并指出该操作失败过(410)。
如果该SLConsumeRight调用失败地返回,那么,无法从许可证中消费该调用中所规定的那个权利,并且,该调用应用程序将不会获得关于那个权利的信息。但是,如果成功地消费该权利,那么,该应用程序可以行使该权利与该许可证的这种绑定,以便从该许可证中获得关于该权利的信息。例如,许可证可能包含被称作“运行”的一般权利,它指出可以运行该应用程序。但是,关于该“运行”权利,该许可证可能包含关于该应用程序的用法的更多的特殊参数——例如,该许可证可以规定是应该打开还是关闭应用程序的特定的特点(例如,打印、编辑、保存等),并且可以提供关于这些特点的运用的特殊参数(例如,该文档只有正运行于特定领域中的机器上才可以被加以保存,或者,该打印特点只可以被使用三十天等)。该SL API不要求将与权利关联的任何特定类型的信息,而是提供一种应用程序商可以由此将任何类型的信息与权利联系起来的机制,该权利随后可以由该应用程序来检索和解释。
假设已如图4中所描述的那样成功地消费权利,那么,该应用程序可以检索与该权利关联的信息。图5中描述了检索该信息的过程。
首先,该应用程序对该捆绑的权利调用该SLGetInformation方法(502)。以上连同对该SLGetInformation方法的说明,描述了可以被检索的这各种类型的信息。然后,该许可服务接收该调用(504)。该服务从包含该捆绑的权利的许可证文件中检索该被请求的信息(506)。然后,该许可服务将该信息放入缓冲器(508),并返回到该调用应用程序(510)。该调用应用程序随后读取该缓冲器的各种内容,并根据该被检索的信息来执行它认为是必要的无论什么动作。
应该注意,该许可服务可能不知道它正作为SLGetInformation调用的一部分来处理的该信息的含义。如上所述,该许可构架提供了一种机制,由此,软件商可以创建权利,并可以将信息与这些权利联系起来。本发明也不局限于可以与该权利关联的任何特定类型的信息。当从该许可证中检索该信息时,它只被该许可服务传递到缓冲器中的该应用程序。然后,该应用程序解释该被检索的信息,决定要根据该信息来采取什么行动,并使用其自己的安全特点来实施该应用程序的决定。(例如,如果根据该被检索的信息,该应用程序决定禁止使用该打印特点,那么,该应用程序包含实际上禁止使用该特点的那个代码以及(可能是)防止电脑黑客篡改该禁止打印的特点的代码。)注意,仅仅出于解释的目的而提供了前述例子,这些前述例子不可被认为对本发明起限制的作用。已参照各种实施例来描述本发明,但可理解这里所使用的这些单词是描述、说明的单词,而不是限制的单词。另外,虽然这里已参照特定的装置、材料和实施例来描述本发明,但是,本发明并不意在局限于这里所揭示的细节;相反,本发明延伸到诸如所附权利要求书的范围以内的所有在功能上相等的结构、方法和运用。受益于本说明书的教导的、精通该技术领域的人可以实现对其的众多修改,并且,在不脱离本发明的范围和精神的前提下,可以在其各个方面进行更改。
权利要求
1.一种用于支持关于计算机程序的许可证的实施的系统,该系统的特征在于包括维持其中存储有该许可证的许可证存储器的许可部件,该许可证包括该软件中的权利和与所述权利关联的数据集,该许可部件向该计算机程序揭示可调用接口,所述可调用接口包括权利消费方法,该方法从该计算机程序中接收所述权利的标识符,并确定是否可以行使该权利;以及,信息检索方法,该方法从该计算机程序中接收所述权利的标识符,并将所述数据集或基于所述数据集的信息提供给该计算机程序。
2.权利要求1的系统,其特征在于其中,所述许可部件可由多个计算机程序来使用,该计算机程序被包括在所述多个计算机程序之中,其中,所述可调用接口进一步包括句柄打开方法,该方法将句柄提供给该计算机程序;其中,该权利消费方法从该计算机程序接收该句柄,并使用该句柄来识别从那里接收对该权利消费方法的调用的该计算机程序。
3.权利要求1的系统,其特征在于其中,该许可证是被存储在所述许可证存储器中的多个许可证之一,并且,其中,该权利消费方法使该许可部件根据一个或多个因素来选择该许可证,这些因素包括该许可证存储器是否与该计算机程序关联;以及,冲突规则,它确定要从与该计算机程序关联的多个许可证之中选择哪个许可证。
4.权利要求1的系统,其特征在于其中,所述可调用接口进一步包括异步上下文启动器方法,该方法建立用于异步处理的上下文,并将所述上下文的标识符提供给该计算机程序;其中,所述权利消费方法从所述计算机程序接收所述上下文的该标识符,并响应于所述上下文的该标识符的接收,来异步地处理权利消费请求。
5.权利要求1的系统,其特征在于其中,该权利消费方法根据是否在该许可证中识别该权利,来确定是否可以行使该权利。
6.权利要求1的系统,其特征在于其中,该计算机程序和该许可部件在机器上执行,并且,其中,该权利消费方法根据该许可证是否与所述机器捆绑,来确定是否可以行使该权利。
7.权利要求1的系统,其特征在于其中,该计算机程序与产品标识符关联,并且,其中,该权利消费方法根据该许可证是否与所述机器或与所述机器是其中的一个成员的一类机器相捆绑,来确定是否可以行使该权利。
8.一种限制与许可证关联的计算机程序的使用的方法,该许可证规定该计算机程序中的权利,该方法的特征在于包括通过第一调用许可服务的接口的第一种方法,来调用所述许可服务,所述第一调用由与所述权利关联的标识符来用参数表示;响应于所述第一调用,来接收关于是否可行使用该权利的指示;以及,根据该指示,来从事第一行为或第二行为。
9.权利要求8的方法,其特征在于其中,所述第一行为包括允许该计算机程序执行;并且,其中,所述第二行为包括停止该计算机程序的执行。
10.权利要求8的方法,其特征在于其中,所述第一行为包括允许该计算机程序执行第一功能集;并且,其中,所述第二行为包括允许该计算机程序执行不同于所述第一功能集的第二功能集。
11.权利要求8的方法,其特征在于其中,该权利与数据集关联,其中,该方法进一步包括第二调用所述接口的第二种方法,所述第二种方法由该权利的指示来用参数表示;以及,响应于所述第二调用,来接收所述数据集。
12.权利要求11的方法,其特征在于进一步包括根据所述数据集,来指导该计算机程序的所述操作。
13.权利要求8的方法,其特征在于进一步包括作出第二调用所述接口的第二种方法;以及,响应于所述第二调用,来接收一句柄;其中,在所述第一调用之前进行所述第二调用,并且,其中,所述第一调用由所述句柄来进一步用参数表示。
14.权利要求8的方法,其特征在于进一步包括作出第二调用所述接口的第二种方法;以及,响应于所述第二调用,来接收异步上下文;其中,在所述第一调用之前进行所述第二调用,其中,所述第一调用由所述异步上下文来进一步用参数表示,并且,其中,该计算机程序至少执行一个动作,同时,该第一调用被异步地处理。
15.权利要求8的方法,其特征在于其中,所述第一种方法根据一个或多个因素来确定是否可行使该权利,这些因素包括该许可证是否与该计算机程序正在其上执行的机器或环境相捆绑;该许可证或权利是否跟与该计算机程序关联的产品标识符相捆绑;该许可证或权利是否已到期;以及,该权利已被消费的次数是否超过该许可证中所规定的权利。
16.一种计算机可读介质,其上具有被编码的计算机可执行指令,以执行允许实施对计算机程序的许可证的方法,该方法的特征在于包括从该计算机程序接收第一种方法调用,该第一种方法调用识别该计算机程序中的权利;确定该权利被包含在该许可证中,并且可以行使;以及,向该计算机程序返回指示可行使该权利。
17.权利要求16的计算机可读介质,其特征在于其中,该指示包括该权利与该许可证的绑定。
18.权利要求16的计算机可读介质,其特征在于其中,所述确定动作基于是否在该许可证中规定该权利。
19.权利要求16的计算机可读介质,其特征在于其中,所述确定动作基于该许可证是否与该计算机程序正在其上执行的机器相捆绑。
20.权利要求16的计算机可读介质,其特征在于其中,所述确定动作基于该许可证或权利是否被捆绑到该计算机程序。
21.权利要求16的计算机可读介质,其特征在于其中,所述确定动作基于该许可证或权利是否没有到期。
22.权利要求16的计算机可读介质,其特征在于其中,所述确定动作基于该许可证是否已被消费超过限制的次数。
23.权利要求16的计算机可读介质,其特征在于其中,该方法进一步包括从该计算机程序接收第二种方法调用;以及,响应于该第二种方法调用,来返回识别该计算机程序的、到该计算机程序的句柄;其中,在所述第二种方法调用之后执行所述第一种方法调用,并且,其中,所述第一种方法调用进一步识别所述句柄。
24.权利要求16的计算机可读介质,其特征在于其中,该方法进一步包括从该计算机程序接收第二种方法调用;响应于该第二种方法调用,来将异步上下文返回到该计算机程序,其中,该第一种方法调用在该第二种方法调用之后被加以执行,并识别所述异步上下文;以及,异步地执行该第一种方法调用,同时,该计算机程序执行动作。
25.权利要求16的计算机可读介质,其特征在于其中,该权利与数据集关联,并且,其中,该方法进一步包括接收指示了该权利的第二种方法调用;以及,响应于所述第二种方法调用,来将该数据集提供给该计算机程序。
全文摘要
一种软件许可“应用编程接口”(API),它允许软件产品使用公共服务的该许可证管理功能。许可证规定软件产品中的权利。该软件产品调用该API上的消费方法,以给以消费权利。如果该权利存在,则该服务将该权利捆绑到在其中发现该权利的该许可证。通过根据是否发现该权利的有效实例来准予或拒绝对一些或所有特点的访问,该软件产品实施该许可证的各种条款。任意数据可以与权利关联。该API包括一种方法,用于从以前已由该消费方法来捆绑的权利中检索数据。
文档编号G06F21/24GK1609802SQ20041008829
公开日2005年4月27日 申请日期2004年10月21日 优先权日2003年10月24日
发明者C·古恩亚可迪, 张宁, 徐文斌 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1