專利名稱:保護(hù)媒體內(nèi)容的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及保護(hù)媒體內(nèi)容的方法和系統(tǒng)。
背景技術(shù):
諸如提供數(shù)據(jù)流形式的音頻和/或視頻數(shù)據(jù)等內(nèi)容提供商、提供呈現(xiàn)這類數(shù)據(jù)的 應(yīng)用程序的應(yīng)用程序銷售商、以及其他人經(jīng)常希望保護(hù)這類數(shù)據(jù)免遭非授權(quán)實(shí)體的探查、 使用或呈現(xiàn)。這一保護(hù)通常希望從數(shù)據(jù)連同操作或處理這類數(shù)據(jù)的組件鏈一起,以受保護(hù) 的形式駐留并駐留在某一類型的可讀介質(zhì)的那一點(diǎn),直到并包括向諸如顯示器或揚(yáng)聲器等 設(shè)備提供數(shù)據(jù)的物理輸出連接器以及這些設(shè)備本身。作為示例,考慮圖1,它在高層次上示出了一個(gè)示例性系統(tǒng)10,其中,受保護(hù)的內(nèi) 容12,如壓縮并加密的內(nèi)容可被接收并處理。在這一示例中,受保護(hù)的內(nèi)容被提供到諸如個(gè) 人計(jì)算機(jī)等消費(fèi)者設(shè)備14中。在消費(fèi)者設(shè)備內(nèi),應(yīng)用程序16通過(guò)例如使用解密組件18來(lái) 解密內(nèi)容,并使用解碼器組件20來(lái)解碼或解壓內(nèi)容,來(lái)處理受保護(hù)的內(nèi)容。一旦內(nèi)容被解 碼,它通??山?jīng)受某種處理,在此之后所處理的內(nèi)容被提供給一呈現(xiàn)組件22,它然后確保數(shù) 據(jù)被提供給設(shè)備,如顯示器24 (在視頻數(shù)據(jù)的情況下)和/或揚(yáng)聲器26 (在音頻數(shù)據(jù)的情 況下)。在本系統(tǒng)中,為使數(shù)據(jù)能夠到達(dá)諸如顯示器或揚(yáng)聲器等適當(dāng)?shù)挠布O(shè)備,數(shù)據(jù)必 須經(jīng)過(guò)某一類型的總線,如PCI/AGP總線傳輸,然后必須經(jīng)過(guò)一物理連接器并通過(guò)線纜,如 S-Video線纜或DVI線纜。隨著時(shí)間的推移,開(kāi)發(fā)了各種不同類型的內(nèi)容保護(hù)方案和技術(shù),并在例如內(nèi)容在 消費(fèi)者設(shè)備14內(nèi)解密并提供給諸如顯示器或揚(yáng)聲器等輸出設(shè)備時(shí),使用它們來(lái)保護(hù)這些 內(nèi)容。這些保護(hù)方案和技術(shù)就隨著音頻和視頻數(shù)據(jù)的不同的種類而變化。另外,并且也許, 最重要的是當(dāng)前沒(méi)有一種方法使應(yīng)用程序能夠安全地控制這些各種不同類型的內(nèi)容保護(hù) 方案和模式的集合的行為。更具體地,考慮處理最終要在硬件設(shè)備上呈現(xiàn)的數(shù)據(jù)的組件鏈。如本領(lǐng)域的技術(shù) 人員所理解的,當(dāng)數(shù)據(jù)和通信在該鏈中時(shí),有不同的組件層接觸或能夠訪問(wèn)這一數(shù)據(jù)以及 來(lái)自應(yīng)用程序的相關(guān)聯(lián)的通信。例如,應(yīng)用程序通常不直接與呈現(xiàn)數(shù)據(jù)的硬件通信。相反, 通常在用戶模式中存在一軟件棧,應(yīng)用程序用它來(lái)進(jìn)行通信,然后在用戶模式軟件棧之下 的內(nèi)核模式中有一驅(qū)動(dòng)程序棧,它實(shí)際上與硬件通信。實(shí)際上,鏈中的這些組件的任一個(gè)可 以有效地篡改要沿該鏈傳遞的數(shù)據(jù)和/或通信。因此,本發(fā)明激起了對(duì)于為從應(yīng)用程序流到下游組件的通信和數(shù)據(jù)兩者提供安全 信道相關(guān)聯(lián)的關(guān)注。
圖1是可處理媒體內(nèi)容的系統(tǒng)的高級(jí)框圖。圖2是用于說(shuō)明依照一個(gè)實(shí)施例的保護(hù)協(xié)議的各方面的系統(tǒng)的框圖。圖3是示出依照一個(gè)實(shí)施例的創(chuàng)造性保護(hù)協(xié)議的各方面的框圖。圖4是示出依照一個(gè)實(shí)施例的創(chuàng)造性保護(hù)協(xié)議的各方面的框圖。圖5是示出依照一個(gè)實(shí)施例的創(chuàng)造性保護(hù)協(xié)議的各方面的框圖。圖6是描述依照本發(fā)明的方法中的步驟的流程圖。圖7是示出關(guān)于一實(shí)現(xiàn)示例的示例性系統(tǒng)的框圖。
具體實(shí)施例方式纖各種實(shí)施例涉及使用一協(xié)議的方法和系統(tǒng),該協(xié)議通過(guò)在諸如運(yùn)行受保護(hù)內(nèi)容回 放應(yīng)用程序的計(jì)算機(jī)等設(shè)備,和相關(guān)聯(lián)的顯示設(shè)備的相關(guān)聯(lián)的驅(qū)動(dòng)程序,如圖形驅(qū)動(dòng)程序 之間建立一安全通信信道,并在某些實(shí)施例中建立一安全數(shù)據(jù)信道,啟用了媒體內(nèi)容保護(hù), 這些顯示設(shè)備諸如監(jiān)視器、平板IXD、電視機(jī)等。各種實(shí)施例針對(duì)解決內(nèi)容提供商和應(yīng)用程 序銷售商發(fā)信號(hào)通知內(nèi)容保護(hù)應(yīng)當(dāng)被應(yīng)用到通過(guò)物理連接器輸出到諸如顯示設(shè)備等設(shè)備 的數(shù)據(jù)的需求。下文所描述的各種實(shí)施例提供了用于將命令從用戶模式回放應(yīng)用程序安全地傳 遞到諸如圖形驅(qū)動(dòng)程序等驅(qū)動(dòng)程序,并將狀態(tài)信息從驅(qū)動(dòng)程序安全地返回到用戶模式應(yīng)用 程序的裝置。在下文描述的實(shí)施例中,一旦建立了一安全通信信道,用戶模式應(yīng)用程序可指 令相關(guān)聯(lián)的驅(qū)動(dòng)程序在計(jì)算機(jī)和顯示設(shè)備之間的物理連接器上啟用內(nèi)容輸出保護(hù)。安全信 道會(huì)話的獨(dú)占性可防止攻擊者在內(nèi)容從計(jì)算機(jī)發(fā)送到顯示器時(shí)記錄受保護(hù)的內(nèi)容。在以下的討論中,各種實(shí)施例的描述針對(duì)兩條單獨(dú)但相關(guān)的線。具體地,在下文名 為“用于建立從應(yīng)用程序到下游組件的安全信道的協(xié)議”一節(jié)中,提供了一種創(chuàng)造性協(xié)議的 描述。該協(xié)議旨在用于任一合適的系統(tǒng),并不必要束縛到任何一個(gè)特定的系統(tǒng)或操作系統(tǒng)。 在名為“Windows 操作系統(tǒng)上協(xié)議的示例性實(shí)現(xiàn)”的一節(jié)中,在涉及Windows @操作系統(tǒng) 的實(shí)現(xiàn)的環(huán)境中提供了協(xié)議的描述。該描述旨在特別示出一個(gè)特定的實(shí)現(xiàn)以及與該特定實(shí) 現(xiàn)相關(guān)聯(lián)的一些設(shè)計(jì)考慮事項(xiàng)等等。用于建立從應(yīng)用程序到下游組件的安全信道的協(xié)議在以下的描述中,描述了至少某些實(shí)施例,它們可用于提供從應(yīng)用程序到各種下 游組件的安全信令機(jī)制,使得應(yīng)用程序可傳遞應(yīng)當(dāng)應(yīng)用潛在數(shù)量的內(nèi)容保護(hù)技術(shù)中的哪一 種,以及應(yīng)當(dāng)如何向保護(hù)媒體內(nèi)容輸出應(yīng)用那些內(nèi)容保護(hù)技術(shù)中的至少一些。另外,并且基 于啟用并配置不同類型的內(nèi)容保護(hù)的概念,至少某些實(shí)施例相對(duì)于用于保護(hù)媒體輸出的內(nèi) 容保護(hù)技術(shù)的類型是不可預(yù)知的(agnostic)。這是有利的,因?yàn)樗枋龅南到y(tǒng)和協(xié)議是自 適應(yīng)地靈活的,并可用于許多不同類型的現(xiàn)有和未來(lái)的內(nèi)容保護(hù)技術(shù),這可以從下文中了 解。作為其中可使用本創(chuàng)造性協(xié)議的一個(gè)典型系統(tǒng)的示例綜述,考慮圖2,它以消費(fèi)者 設(shè)備200的形式示出了一計(jì)算系統(tǒng)。消費(fèi)者設(shè)備200可包括可用于呈現(xiàn)受保護(hù)媒體內(nèi)容的 任一合適類型的消費(fèi)設(shè)備。這一設(shè)備的一個(gè)示例是個(gè)人計(jì)算機(jī)。其它類型的設(shè)備可包括個(gè)人視頻記錄器(PVR)設(shè)備、數(shù)碼錄像機(jī)(DVR)設(shè)備等等。消費(fèi)者設(shè)備200包括可從受保護(hù)的媒體內(nèi)容源獲得受保護(hù)媒體內(nèi)容的回放應(yīng)用 程序202、便于處理受保護(hù)媒體內(nèi)容的系統(tǒng)軟件204、以及用于與硬件208 (如,視頻卡)接 口的驅(qū)動(dòng)程序軟件206 (或相關(guān)聯(lián)的硬件的軟件表示),硬件208通過(guò)某一類型的物理連接 器210向相關(guān)聯(lián)的輸出設(shè)備212提供受保護(hù)的媒體內(nèi)容,通過(guò)輸出設(shè)備212可向用戶呈現(xiàn) 媒體內(nèi)容。如上所述,輸出設(shè)備的示例包括顯示設(shè)備和揚(yáng)聲器。為進(jìn)行討論的目的,至少在本節(jié)中,回放應(yīng)用程序、系統(tǒng)軟件、驅(qū)動(dòng)程序軟件和硬 件的類型并不特定地相關(guān),本領(lǐng)域的技術(shù)人員可以理解,有各種各樣的不同類型的實(shí)體可 構(gòu)成回放應(yīng)用程序和物理連接器之間的鏈。由此,本討論并不限于任何一個(gè)特定類型的系 統(tǒng)。在所示并描述的實(shí)施例中,有各種不同類型的內(nèi)容保護(hù)技術(shù),它們可用于保護(hù)物 理連接器210和輸出設(shè)備212之間的媒體內(nèi)容。例如,本領(lǐng)域的技術(shù)人員可以理解,各種內(nèi) 容保護(hù)類型可包括模擬內(nèi)容保護(hù)(ACP)、復(fù)制生成管理系統(tǒng)一模擬(CGMS-A)以及高帶寬數(shù) 字內(nèi)容保護(hù)(HDCP)。在附圖中,這些各種類型的內(nèi)容保護(hù)技術(shù)在214處示出。依照此處所描述的實(shí)施例,在應(yīng)用程序202和一個(gè)或多個(gè)下游組件之間建立一安 全鏈路或信道。在所示的示例中,示出了兩個(gè)不同的安全信道,盡管只需實(shí)現(xiàn)任一類型的一 個(gè)信道。具體地,在一個(gè)實(shí)施例中,在應(yīng)用程序202和驅(qū)動(dòng)程序軟件206之間建立安全通信 信道216。在另一實(shí)施例中,在應(yīng)用程序202和硬件208之間建立安全信道218。在所示并描述的實(shí)施例中,信道216可主要用于應(yīng)用程序和驅(qū)動(dòng)程序之間的通 信。這類通信可包括在應(yīng)用程序和驅(qū)動(dòng)程序之間傳遞命令、狀態(tài)請(qǐng)求和相關(guān)聯(lián)的狀態(tài)。信 道218不僅可用于這一類型的通信,也可用于向硬件提供實(shí)際的媒體數(shù)據(jù),如音頻和視頻 數(shù)據(jù)。在本文檔的上下文中,命令是一種指令,并可包括以下特征以及其它特征。首先, 命令可改變或影響硬件208的配置。可選地或另外,命令可以是向硬件發(fā)出的要以某一特 定方式處理媒體內(nèi)容的信號(hào)。狀態(tài)請(qǐng)求可以有效地從硬件中檢索兩組信息。首先,狀態(tài)請(qǐng)求可檢索設(shè)計(jì)從應(yīng)用 程序發(fā)送到下游組件的任何命令的信息。例如,如果應(yīng)用程序發(fā)送了執(zhí)行某一任務(wù)的命 令一例如設(shè)置特定類型的內(nèi)容保護(hù)技術(shù)一相關(guān)聯(lián)的狀態(tài)請(qǐng)求可檢索關(guān)于任務(wù)是否已被執(zhí) 行的信息。其次,狀態(tài)請(qǐng)求可檢索不必要與命令是否已發(fā)送相關(guān)聯(lián)的信息。例如,狀態(tài)請(qǐng)求 可檢索額外的硬件配置信息,它可能對(duì)特定的設(shè)備是固有的,例如使用的物理連接器的類 型。這類狀態(tài)請(qǐng)求也可用于確認(rèn)特定物理連接器的硬件支持哪些內(nèi)容保護(hù)技術(shù)。例如,物 理連接器可以是DVI連接器,但是在圖形硬件中可能沒(méi)有HDCP支持。由此,應(yīng)用程序然后 可作出明智的選擇,以播放視頻數(shù)據(jù)的向下采樣(down-sampled)或較低分辨率的版本,或 者可能完全不播放視頻數(shù)據(jù)。建立安全信道在所示并描述的實(shí)施例中,使用了單向信任模型和密鑰傳輸協(xié)議來(lái)建立通信鏈的 兩個(gè)端點(diǎn)間的信任。本領(lǐng)域的技術(shù)人員可以理解,使用密鑰傳輸具有許多優(yōu)點(diǎn)。首先,使用 密鑰傳輸,創(chuàng)建熵的責(zé)任留給了建立信任的實(shí)體一此處為應(yīng)用程序202。其次,密鑰傳輸提 供了完成所謂“通過(guò)”的能力。通過(guò)可允許內(nèi)容數(shù)據(jù)在沿到圖形硬件的鏈的一路上被加密。這進(jìn)而可允許圖形硬件解密內(nèi)容數(shù)據(jù)、將內(nèi)容數(shù)據(jù)解碼成相關(guān)聯(lián)的表面、然后將內(nèi)容數(shù)據(jù) 處理到顯示器上,這是本領(lǐng)域技術(shù)人員所理解的,使用信道216作為示例,使用例如公鑰基礎(chǔ)結(jié)構(gòu)(PKI)技術(shù)在應(yīng)用程序202和驅(qū) 動(dòng)程序206之間建立單向認(rèn)證信道。更具體地,在本示例中,在應(yīng)用程序202和驅(qū)動(dòng)程序 206之間建立了數(shù)據(jù)完整性密鑰形式的通信密鑰。一旦建立了通信密鑰,可將命令和狀態(tài)消 息以未加密的形式傳遞,并且消息認(rèn)證代碼或MAC可用數(shù)據(jù)完整性密鑰來(lái)創(chuàng)建。作為示例,結(jié)合圖3考慮以下內(nèi)容。為建立與下游組件的信任,應(yīng)用程序202首先 調(diào)用驅(qū)動(dòng)程序軟件206,并從驅(qū)動(dòng)程序軟件接收一隨機(jī)數(shù)和與硬件208相關(guān)聯(lián)的數(shù)字證 書(shū)CerteH (圖2)。當(dāng)應(yīng)用程序202接收數(shù)字證書(shū)CerteH時(shí),應(yīng)用程序處理該證書(shū)以驗(yàn)證數(shù)字 證書(shū)上的簽名是否由可信實(shí)體提供,并檢索驅(qū)動(dòng)程序軟件206 (在使用信道216的情況下) 或圖形硬件208 (在使用信道218的情況下)的公鑰(PeH)。公鑰PeH現(xiàn)在可由應(yīng)用程序用 于加密數(shù)據(jù),該數(shù)據(jù)智能由相關(guān)聯(lián)的私鑰來(lái)解密,該私鑰由驅(qū)動(dòng)程序軟件或圖形硬件保密。 上述過(guò)程在應(yīng)用程序和驅(qū)動(dòng)程序軟件之間建立了信任。在建立信任之后,應(yīng)用程序現(xiàn)在設(shè)置密鑰傳輸。在本示例中,應(yīng)用程序202將由 驅(qū)動(dòng)程序提供的隨機(jī)數(shù)、數(shù)據(jù)完整性密鑰kDI (也稱為會(huì)話密鑰)、隨機(jī)起始狀態(tài)序列號(hào) (status_start)和隨機(jī)起始命令序列號(hào)(commancLstart)串接、使用驅(qū)動(dòng)程序軟件的公鑰 卩^來(lái)加密值的串接、并將經(jīng)加密的數(shù)據(jù)發(fā)送到驅(qū)動(dòng)程序軟件206。剛才所述的處理在應(yīng)用 程序和驅(qū)動(dòng)程序軟件間建立所用的會(huì)話密鑰。隨機(jī)起始狀態(tài)序列號(hào)(statusjtart)和隨 機(jī)起始命令序列號(hào)(commancLstart)用于確保是否丟失了特定的消息,不論該消息是狀態(tài) 請(qǐng)求或報(bào)告的狀態(tài)(在起始狀態(tài)序列號(hào)的情況下)還是命令(在起始命令序列號(hào)的情況 下),預(yù)期的消息接收器可確認(rèn)這一事實(shí)。更具體地,每次當(dāng)應(yīng)用程序發(fā)送一條命令時(shí),隨機(jī) 起始命令序列號(hào)被遞增一。類似地,每次當(dāng)發(fā)送一狀態(tài)消息時(shí),發(fā)送實(shí)體將起始狀態(tài)序列號(hào) 遞增一。在接收端,消息接收器可通過(guò)簡(jiǎn)單地核查序列號(hào)是否按順序出現(xiàn)來(lái)確認(rèn)是否丟失 了消息。如果有缺少的序列號(hào),則相關(guān)聯(lián)的消息丟失,并可采取適當(dāng)?shù)男袆?dòng)。以這一方式, 使用隨機(jī)起始序列號(hào)確保了消息的完整性和順序。在一個(gè)示例中,以下表中陳述的值和描述可用于上述過(guò)程。 在過(guò)程的這一點(diǎn)上,在應(yīng)用程序和驅(qū)動(dòng)程序軟件之間建立了安全信道。以下討論 描述了本創(chuàng)造性協(xié)議的兩部分一命令協(xié)議和狀態(tài)協(xié)議。侖令協(xié)議協(xié)議的命令部分令系統(tǒng)的硬件,如硬件208 (圖2)能夠由應(yīng)用程序指令,以打開(kāi)并 在某些情況下配置特定的內(nèi)容保護(hù)技術(shù),如HDCP或CGMS-A。在所示并描述的實(shí)施例中,命 令消息包含在一包封中,它具有兩個(gè)段數(shù)據(jù)段和消息認(rèn)證代碼或MAC段。在所述并描述的實(shí)施例中,命令消息的數(shù)據(jù)段包含命令和相關(guān)聯(lián)的命令序列號(hào)。 消息認(rèn)證代碼或MAC段包含可以被認(rèn)為是命令和相關(guān)聯(lián)的命令序列號(hào)的加密鑰的散列的 內(nèi)容。用于產(chǎn)生加密鑰的散列的密鑰是上述的數(shù)據(jù)完整性密鑰kDI。例如,考慮圖4,其中應(yīng)用程序202被示出為向驅(qū)動(dòng)程序軟件206發(fā)送以下形式的 命令消息Command, MACkDI (Command)其中,消息的“Command”部分不僅包括來(lái)自應(yīng)用程序的相關(guān)聯(lián)的命令,還包括了相 關(guān)聯(lián)的命令序列號(hào)。消息的“MACkDI (Command) ”部分包括由應(yīng)用程序計(jì)算的“Command”部 分的MAC。當(dāng)驅(qū)動(dòng)程序軟件206接收該命令消息時(shí),驅(qū)動(dòng)程序軟件可在消息的命令部分使用 協(xié)商的會(huì)話密鑰kDI運(yùn)行MAC算法。一旦在命令消息的命令部分上運(yùn)行了 MAC算法,驅(qū)動(dòng)程 序軟件可將該值與命令消息中接收的MAC值進(jìn)行比較。如果兩個(gè)值的比較是有利的,則可 建立命令消息的完整性。在一個(gè)示例中,下表中陳述的值和描述可用于上述過(guò)程。
狀態(tài)協(xié)議在所示并描述的實(shí)施例中,狀態(tài)消息包含在一包封內(nèi),它具有兩個(gè)段數(shù)據(jù)段和消 息認(rèn)證代碼或MAC段。在本示例中,消息發(fā)送者使用會(huì)話密鑰kDI和相關(guān)聯(lián)的MAC算法來(lái)計(jì) 算狀態(tài)數(shù)據(jù)的MAC。作為如何實(shí)現(xiàn)狀態(tài)協(xié)議的一個(gè)示例,考慮圖5。應(yīng)用程序202以下列形式作出對(duì)狀 態(tài)信息的請(qǐng)求rAPP, Status Request其中,rAPP是由應(yīng)用程序生成的隨機(jī)數(shù),“Status Request”是對(duì)該狀態(tài)信息的實(shí)際 請(qǐng)求。響應(yīng)于從應(yīng)用程序接收狀態(tài)請(qǐng)求,驅(qū)動(dòng)程序軟件206確認(rèn)合適的任何狀態(tài)信息,并將 該狀態(tài)信息連同適當(dāng)?shù)臓顟B(tài)序列號(hào)一起提供給包封的數(shù)據(jù)段。另外,驅(qū)動(dòng)程序軟件也計(jì)算 狀態(tài)信息以及由應(yīng)用程序提供的隨機(jī)數(shù)的MAC。狀態(tài)消息然后以下列形式被提供回應(yīng)用程 序rAPP, Status, MACkDI (rAPP, Status)
9
其中,“ Status ”不僅包括狀態(tài)信息,還包括狀態(tài)序列號(hào)。消息的MACffiI (rAPP, Status)部分包括由應(yīng)用程序提供的隨機(jī)數(shù)和狀態(tài)信息的MAC。當(dāng)應(yīng)用程序接收狀態(tài)信息 時(shí),它可通過(guò)在隨機(jī)數(shù)和狀態(tài)信息上運(yùn)行MAC算法來(lái)計(jì)算隨機(jī)數(shù)和狀態(tài)信息的MAC,然后可 將該值與消息的MACkDI(rAPP,Status)部分中的值進(jìn)行比較。由此,應(yīng)用程序可確認(rèn)狀態(tài)消 息是真實(shí)的。應(yīng)用程序然后可使用消息的內(nèi)容來(lái)驗(yàn)證該消息是否以正確的順序(通過(guò)序列 號(hào)),以及該狀態(tài)信息是否涉及先前由應(yīng)用程序發(fā)送的狀態(tài)請(qǐng)求(通過(guò)隨機(jī)數(shù)rAPP)。在一個(gè)示例中,下表中陳述的值和描述可用于上述過(guò)程。 示例件方法圖6示出了依照一個(gè)實(shí)施例的方法中的步驟。該方法可以結(jié)合任一合適的硬件、 軟件、固件或其組合來(lái)實(shí)現(xiàn)。另外,在某些軟件實(shí)現(xiàn)中,本發(fā)明的各方面可以被實(shí)現(xiàn)為駐留 在一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)上,并可被執(zhí)行來(lái)實(shí)現(xiàn)所描述的方法的計(jì)算機(jī)可讀指令。在 本示例中,所示的方法被分割成兩部分一其中一部分被標(biāo)記為“應(yīng)用程序”,另一部分被標(biāo) 記為“下游組件”。這樣做的目的是示出哪些實(shí)體執(zhí)行要描述的動(dòng)作。因此,出現(xiàn)在標(biāo)簽“應(yīng) 用程序”下的動(dòng)作由應(yīng)用程序執(zhí)行,出現(xiàn)在標(biāo)簽“下游組件”下的動(dòng)作由駐留在應(yīng)用程序下 游的組件執(zhí)行。在一個(gè)實(shí)施例中,下游組件可包括驅(qū)動(dòng)程序軟件或處理媒體數(shù)據(jù)的相關(guān)聯(lián) 的硬件的軟件表示。在另一實(shí)施例中,下游組件可包括硬件元件本身。上文結(jié)合圖2-5示出并描述了實(shí)現(xiàn)所描述的方法的一個(gè)示例性系統(tǒng)??梢岳斫獠?明白,也可以使用其它系統(tǒng)而不脫離本發(fā)明的精神和范圍。步驟600從一回放應(yīng)用程序確定一與下游組件相關(guān)聯(lián)的公鑰。如何完成這一過(guò)程 的示例已在上文給出。步驟602使用該公鑰在回放應(yīng)用程序和下游組件建立一安全信道。 步驟600和602共同在回放應(yīng)用程序和下游組件之間建立了信任。如何建立這一信任的一 個(gè)示例已在上文結(jié)合圖3描述。當(dāng)然,也可以使用其它方法而不脫離本發(fā)明的精神和范圍。步驟604使用安全信道向下游組件發(fā)送命令消息??墒褂萌我缓线m的命令消息格 式,其一個(gè)示例在上文結(jié)合圖4給出。另外,可將任一合適和/或適當(dāng)類型的命令從應(yīng)用程 序發(fā)送到下游組件。在一個(gè)實(shí)施例中,可發(fā)送的命令指示下游組件啟用一種特定類型的內(nèi) 容保護(hù)技術(shù),以保護(hù)要由系統(tǒng)處理的媒體內(nèi)容或數(shù)據(jù)。步驟606通過(guò)安全信道接收命令消息。這一步驟由向其發(fā)送命令消息的下游組件 執(zhí)行。步驟608然后驗(yàn)證命令消息的完整性。任一合適的方法可用于驗(yàn)證命令消息的完整性,其一個(gè)示例已結(jié)合圖4給出。一旦驗(yàn)證了命令消息的完整性,步驟610實(shí)現(xiàn)包含在該命 令消息中的相關(guān)聯(lián)的命令。步驟612使用安全信道向下游組件發(fā)送狀態(tài)請(qǐng)求??墒褂萌我缓线m類型的狀態(tài)請(qǐng) 求結(jié)構(gòu),其一個(gè)示例已在上文結(jié)合圖5給出。步驟614通過(guò)安全信道接收狀態(tài)請(qǐng)求,步驟 616作為響應(yīng)準(zhǔn)備狀態(tài)消息,并使用安全信道將該狀態(tài)消息發(fā)送到應(yīng)用程序??墒褂萌我缓?適的狀態(tài)消息結(jié)構(gòu),其一個(gè)示例已在上文結(jié)合圖5給出。步驟618通過(guò)安全信道接收狀態(tài)消息,步驟620驗(yàn)證狀態(tài)消息的完整性??墒褂?任一合適的方法來(lái)驗(yàn)證狀態(tài)消息的完整性,其一個(gè)示例在上文給出。
在Windows 操作系統(tǒng)上協(xié)議的示例性實(shí)現(xiàn)系統(tǒng)綜述圖7 —般在700示出了可用于實(shí)現(xiàn)上述安全信道協(xié)議的系統(tǒng)。在以下的討論中, 本創(chuàng)造性協(xié)議被稱為經(jīng)證明的輸出保護(hù)協(xié)議或“C0PP”。在本示例中,使用Microsoft DirectShow 作為一個(gè)示例,它是流媒體的體系結(jié)構(gòu)。如本領(lǐng)域的技術(shù)人員可以理解的, Microsoft DirectShow :提供了高質(zhì)量的媒體流回放,并支持各種各樣的格式,包括高級(jí) 流格式(ASF)、運(yùn)動(dòng)圖像專家組(MPEG)、音頻-視頻交錯(cuò)(AVI)、MPEG音頻第3層(MP3)和 WAV文件。為達(dá)到流傳送視頻和音頻數(shù)據(jù)所需的吞吐量,DirectShow 使用Microsoft DirectDraw⑧和Microsoft DirectSound 來(lái)有效地向系統(tǒng)的聲音和圖形卡呈現(xiàn)數(shù) 據(jù)。DirectDraw 是DirectX 的一個(gè)顯示組件,它允許軟件設(shè)計(jì)者直接操縱顯示存儲(chǔ) 器、硬件位塊傳送器(blitter)、硬件覆蓋和翻轉(zhuǎn)表面,這是本領(lǐng)域的技術(shù)人員所理解的。 DirectDraw 提供了以直接的32位路徑對(duì)設(shè)備專用顯示功能的獨(dú)立于設(shè)備的訪問(wèn)。64位 路徑也可存在于Windows 的64位版本中。DirectDraw 調(diào)用驅(qū)動(dòng)程序中直接訪問(wèn)顯卡的 重要功能,而不會(huì)干涉Windows 的圖形設(shè)備接口(GDI)或與設(shè)備無(wú)關(guān)的位圖(DIB)引擎。在DirectShow 中,同步是通過(guò)在加了時(shí)間標(biāo)記的媒體樣值中封裝媒體數(shù)據(jù)來(lái)實(shí) 現(xiàn)的。為處理各種不同的媒體源、格式和硬件設(shè)備,DirectShow 使用一種模塊化體系結(jié) 構(gòu),其中,被稱為過(guò)濾器的操作系統(tǒng)組件可被混合,并被匹配以提供對(duì)不同情形的支持。在 所示的示例中,這些過(guò)濾器可以被集合成一過(guò)濾器圖704,它由回放應(yīng)用程序702使用以促 使多媒體數(shù)據(jù)由硬件設(shè)備處理并呈現(xiàn)。在這一特定的示例中,過(guò)濾器圖704包括讀取媒體內(nèi)容的源過(guò)濾器706,以及解壓 內(nèi)容的解碼器708 (如,WMV或MPEG-2解碼器)。視頻呈現(xiàn)組件710接收經(jīng)解壓的內(nèi)容或 數(shù)據(jù),并理解要在其上呈現(xiàn)內(nèi)容的硬件。在這一特定的示例中,有兩種不同類型的呈現(xiàn)組件 可以使用一 VMR7 (寫(xiě)入DirectX版本7SDK中的視頻混合呈現(xiàn)程序版本7)以及VMR9 (寫(xiě)入 DirectX版本9SDK中的視頻混合呈現(xiàn)程序版本9)組件。在所示的示例中,提供了用戶模式DirectDraw 組件712,它是由DirectDraw 應(yīng)用程序加載并調(diào)用的系統(tǒng)提供的動(dòng)態(tài)鏈接庫(kù)(DLL)。該組件提供了硬件仿真、管理各種 DirectDraw :對(duì)象、并提供顯示存儲(chǔ)器和顯示管理服務(wù),這些都是本領(lǐng)域的技術(shù)人員所理 解的。另外,提供了內(nèi)核模式DirectDraw 組件714,它是win32k. sys的一個(gè)整體部分。內(nèi)核模式組件714是由內(nèi)核模式顯示驅(qū)動(dòng)程序加載的系統(tǒng)提供的圖形引擎。該組件執(zhí)行驅(qū) 動(dòng)程序的參數(shù)確認(rèn),由此能夠容易地實(shí)現(xiàn)更多健壯的驅(qū)動(dòng)程序。提供了 DirectDraw 圖形 驅(qū)動(dòng)程序716,它通常由第三方硬件銷售商實(shí)現(xiàn)。在操作中,受保護(hù)的內(nèi)容通常具有與其相關(guān)聯(lián)的某一組政策。政策可規(guī)定在呈現(xiàn) 相關(guān)聯(lián)的內(nèi)容時(shí)所使用的內(nèi)容保護(hù)的類型和級(jí)別。例如,如果內(nèi)容要通過(guò)DVI連接器來(lái)播 放,則政策可規(guī)定必須啟用HDCP,否則不能播放內(nèi)容。在本示例中,應(yīng)用程序702知道與內(nèi)容相關(guān)聯(lián)的政策。實(shí)際上,源過(guò)濾器706可包 括負(fù)責(zé)確定與內(nèi)容相關(guān)聯(lián)的政策,然后通知應(yīng)用程序的組件。用戶樽式應(yīng)用稈序接口(API)—旦提取了政策并確認(rèn)了政策含義,則系統(tǒng)700首先確認(rèn)是否可以在這一特定系 統(tǒng)中實(shí)施該政策。在這一特定示例中實(shí)現(xiàn)這一過(guò)程的方法是通過(guò)一用戶模式應(yīng)用程序接口 (API),它被稱為IAMCertifiedOutputProtection,由視頻呈現(xiàn)組件710展示。依照一個(gè)實(shí) 施例,IAMCertifiedOutputProtection接口由以下方法構(gòu)成,這些方法由應(yīng)用程序調(diào)用typedef struct_AMCOPPSignature{
BYTE Signature[256];
}AMC0PPSignature ;
typedef struct_AMC0PPCommand{
GUID macKDI ; //'16字節(jié)
GUID guidCommandID ; //'16字節(jié)
DWORD dwSequence ; //'4字節(jié)
DWORD cbSizeData ; //'4字節(jié)
BYTE CommandData[4056] ;//4056 字節(jié)(4056+4+4+16+16 = 4096)
}AMC0PPCommand, *LPAMC0PPCommand
typedef struct_AMC0PPStatusInput{
GUID rApp ;"16字節(jié)
GUID guidStatusRequestID ;//16字節(jié)
DWORD dwSequence ;//4字節(jié)
DWORD cbSizeData ;//4字節(jié)
BYTE StatusData[4056];"4056字節(jié)(4056+4+4+16+16 = 4096)
}AMC0PPStatusInput, *LPAMC0PPStatusInput ;
typedef struct_AMC0PPStatus0utput{
GUID macKDI ;"16字節(jié)
DWORD cbSizeData ;//4字節(jié)
BYTE COPPStatus[4076];"4076字節(jié)(4076+16+4 = 4096)
}AMC0PPStatus0utput, *LPAMC0PPStatus0utput ;
IAMCertifiedOutputProtection
HRESULT KeyExchange(
[out] DWORD^pdwRandom由圖形驅(qū)動(dòng)程序生成的32位隨機(jī)婁
[out] BYTE**VarLenCertGH, 圖形 !件證書(shū),由CoTaskMemFree釋
放的存儲(chǔ)器[out] DWORD*pdwLengthCertGH);圖形硬件證書(shū)的長(zhǎng)度HRESULT SessionSequenceStart([in]AMCOPPSignature^pSig); 來(lái)自圖形驅(qū)動(dòng)程序的32位隨機(jī)數(shù)、128位隨機(jī)數(shù)據(jù)安全會(huì)話密鑰、128位隨機(jī)數(shù)據(jù)完整性會(huì)話密鑰、32位隨機(jī)起始狀態(tài)序列號(hào)和32位隨機(jī)起始命令序列號(hào)的串接,由圖形硬件的公鑰加密。該值的長(zhǎng)度為2048比特。HRESULT ProtectionCommand([in]const AMCOPPCommand* 經(jīng)加密的命令cmd,HRESULT ProtectionStatus([in]const AMCOPPStatusInput*在其上請(qǐng)求狀態(tài)的特征的描述plnput,[out] AMCOPPStatusOutput*返回的狀態(tài)信息pOutput);在上述示例中,AMCOPPCommand結(jié)構(gòu)是應(yīng)用程序用于向下游組件發(fā)送命令的數(shù)據(jù)
結(jié)構(gòu),并可在諸如圖4所示的交換中使用。AMCOPPStatusInput結(jié)構(gòu)是應(yīng)用程序用于作出狀 態(tài)請(qǐng)求的數(shù)據(jù)結(jié)構(gòu),并可在諸如圖5的左側(cè)所示的交換中使用。AMCOPPStatusOutput是圖 形驅(qū)動(dòng)程序用于向應(yīng)用程序提供回狀態(tài)信息的數(shù)據(jù)結(jié)構(gòu),并可在諸如圖5的右側(cè)示出的交 換中使用。內(nèi)核模式 DDI (DX-VA)DX-VA經(jīng)證明的輸出保護(hù)協(xié)議(C0PP)提供了用于將命令從諸如回放應(yīng)用程序702 等用戶模式應(yīng)用程序傳遞到諸如圖形驅(qū)動(dòng)程序716等驅(qū)動(dòng)程序,并用于將狀態(tài)從驅(qū)動(dòng)程序 返回到用戶模式應(yīng)用程序的手段。如上所述,命令和狀態(tài)所流過(guò)的信道是受到保護(hù)的。在這一特定實(shí)現(xiàn)中,內(nèi)容輸出保護(hù)協(xié)議使用DX-VA C0PP設(shè)備,它在下文中詳細(xì)描 述。在以下討論中,使用以下術(shù)語(yǔ) 視頻流視頻流是包括顯示的視頻幀的主要圖像數(shù)據(jù)。來(lái)自視頻流的像素總是 不透明的,并不包含任何每像素字母數(shù)據(jù)。 視頻子流視頻子流是需要在顯示組合的視頻幀之前與視頻流的樣值復(fù)合的輔 助圖像數(shù)據(jù)的信道。視頻子流的示例是NTSC被關(guān)閉的字母圖像,DVD子像以及TAL圖 文電視圖像。視頻子流的另一特征是它們包含有限的顏色范圍和每像素字母信息。 視頻會(huì)話視頻會(huì)話由視頻流和可能的一個(gè)或多個(gè)視頻子流構(gòu)成,視頻子流在 連接到計(jì)算機(jī)的輸出設(shè)備上顯示之前與視頻流組合。在任一特定的時(shí)刻在計(jì)算機(jī)上可能有 若干視頻會(huì)話是活動(dòng)的,在單個(gè)進(jìn)程內(nèi)也可以有若干視頻會(huì)話是活動(dòng)的。
DX-VA C0PP設(shè)備支持通過(guò)內(nèi)容輸出保護(hù)協(xié)議接收命令和狀態(tài)請(qǐng)求的一種新 DX-VA設(shè)備。 連接器圖形硬件和顯示設(shè)備之間的物理輸出連接。
保護(hù)類型可應(yīng)用于通過(guò)連接器傳遞的信號(hào)的保護(hù)類型;可向單個(gè)連接器應(yīng)用 一個(gè)以上保護(hù)類型。 保護(hù)級(jí)別應(yīng)用于通過(guò)連接器傳遞的信號(hào)的保護(hù)級(jí)別。該值依賴于保護(hù)類型一 某些保護(hù)類型,例如示例HDCP只有兩種保護(hù)級(jí)別,為“開(kāi)”和“關(guān)”。設(shè)計(jì)綜述依照本實(shí)施例,為每一視頻會(huì)話創(chuàng)建一被稱為DX-VA C0PP設(shè)備的單個(gè)組件。在圖 7的示例中,在驅(qū)動(dòng)程序716內(nèi)示出了兩個(gè)示例性DX-VA C0PP設(shè)備。DX-VAC0PP設(shè)備表示 C0PP命令和狀態(tài)請(qǐng)求的端點(diǎn)。另外,DX-VA C0PP設(shè)備可虛擬化物理連接器的保護(hù)設(shè)置。單 個(gè)物理連接器支持多個(gè)內(nèi)容保護(hù)類型是可能的。例如,S-Video連接器可支持模擬內(nèi)容保 護(hù)以及CGMS-A Line20保護(hù)和CGMS-A Line21保護(hù)。在本文檔中稍后給出的C0PP示例設(shè) 備驅(qū)動(dòng)程序代碼示出了如何可由驅(qū)動(dòng)程序?qū)崿F(xiàn)C0PP設(shè)備的一個(gè)示例。在所示并描述的實(shí)施例中每一 DX-VA C0PP設(shè)備被配置成當(dāng)多個(gè)視頻會(huì)話在計(jì)算 機(jī)上活動(dòng)時(shí)適當(dāng)?shù)剡\(yùn)作。在此情況中,當(dāng)不同的進(jìn)程試圖通過(guò)C0PP配置輸出顯示適配器 時(shí),要求驅(qū)動(dòng)程序716創(chuàng)建COPP DX-VA設(shè)備的多個(gè)實(shí)例。在本示例中,由驅(qū)動(dòng)程序716創(chuàng) 建了 DX-VA C0PP設(shè)備的兩個(gè)實(shí)例。局部和全局引用計(jì)數(shù)對(duì)于支持內(nèi)容保護(hù)的每一物理連接器,驅(qū)動(dòng)程序716應(yīng)當(dāng)對(duì)每一類型和每一級(jí)別 維護(hù)一全局引用計(jì)數(shù)。在所示并描述的實(shí)施例中,驅(qū)動(dòng)程序716包括一全局狀態(tài)組件,它維 護(hù)該全局狀態(tài)。當(dāng)為視頻會(huì)話創(chuàng)建COPP DX-VA設(shè)備時(shí),設(shè)備應(yīng)當(dāng)包含每一保護(hù)級(jí)別處的每一保護(hù) 類型的局部引用計(jì)數(shù)。這由每一設(shè)備內(nèi)的當(dāng)前保護(hù)級(jí)別組件表示。保護(hù)類型的默認(rèn)級(jí)別計(jì) 數(shù)器應(yīng)當(dāng)被設(shè)為值1,該類型的所有其它保護(hù)級(jí)別計(jì)數(shù)器應(yīng)當(dāng)被設(shè)為值0。當(dāng)視頻會(huì)話設(shè)置特定保護(hù)類型的新保護(hù)級(jí)別時(shí),遞減當(dāng)前保護(hù)級(jí)別的引用計(jì)數(shù), 并遞增新保護(hù)級(jí)別的引用計(jì)數(shù)。也可以對(duì)全局引用級(jí)別計(jì)數(shù)器作出相應(yīng)的改變。只要任一全局級(jí)別計(jì)數(shù)器改變,驅(qū)動(dòng)程序應(yīng)當(dāng)調(diào)查該連接器的所有計(jì)數(shù)器,并確 認(rèn)保護(hù)級(jí)別被設(shè)為對(duì)應(yīng)于其值大于0的最高級(jí)別計(jì)數(shù)器的級(jí)別。在本實(shí)例中,對(duì)一相關(guān)聯(lián) 的物理連接器,有兩種不同的保護(hù)級(jí)別一級(jí)別A和級(jí)別B。注意,全局狀態(tài)組件指示級(jí)別B 保護(hù)被應(yīng)用于物理連接器。由此,級(jí)別B是可應(yīng)用于物理連接器的保護(hù)級(jí)別中的較高者。如 果DX-VA C0PP設(shè)備2終止,則全局狀態(tài)組件將向物理連接器應(yīng)用保護(hù)級(jí)別A。以下的示例 性代碼樣例示出了如何完成這一過(guò)程。盡管全局引用計(jì)數(shù)器大于0,然而內(nèi)容保護(hù)應(yīng)當(dāng)被應(yīng)用于輸出連接器。一旦全局引 用計(jì)數(shù)器達(dá)到0,則應(yīng)當(dāng)從輸出連接器中移除內(nèi)容保護(hù)。只要驅(qū)動(dòng)程序接收DestroyDevice 調(diào)用,全局引用計(jì)數(shù)器應(yīng)當(dāng)被遞減設(shè)備局部引用計(jì)數(shù)器的當(dāng)前級(jí)別。應(yīng)當(dāng)僅在該連接器的 全局引用計(jì)數(shù)器達(dá)到0時(shí)才移除連接器保護(hù)。應(yīng)當(dāng)注意,DestroyDevice可在設(shè)備仍具有大于0的局部引用計(jì)數(shù)器時(shí)被調(diào)用,其 一個(gè)實(shí)例是如果用戶模式被異常終止時(shí)。視頻會(huì)話初始化在所示并描述的實(shí)施例中,視頻會(huì)話與特定的物理輸出連接器聯(lián)系在一起。在顯 示驅(qū)動(dòng)程序級(jí),視頻會(huì)話由以下步驟初始化
調(diào)用GetMoCompGuids以確定是否支持該輸出連接器的DX-VA C0PP。 假定驅(qū)動(dòng)程序不支持該輸出連接器的DX-VA C0PP設(shè)備,則調(diào)用CreateMoComp 來(lái)創(chuàng)建DX-VA C0PP設(shè)備。 用 DXVA_COPPGetCertificateLengthFnCode 函數(shù)代碼來(lái)調(diào)用 RenderMoComp,以 確定應(yīng)當(dāng)用于該會(huì)話的可變長(zhǎng)度圖形硬件證書(shū)的長(zhǎng)度。 用 DXVA_COPPKeyExchangeFnCode 函數(shù)代碼來(lái)調(diào)用 RenderMoComp,以將視頻會(huì) 話應(yīng)用程序證書(shū)傳遞到驅(qū)動(dòng)程序。驅(qū)動(dòng)程序返回128位的私鑰和其可變長(zhǎng)度圖形硬件證書(shū) 的副本。 最后,用 DXVA_COPPSequenceStartFnCode 函數(shù)代碼來(lái)調(diào)用 RenderMoComp,以指 示用32位命令序列起始碼和32位狀態(tài)序列起始碼開(kāi)始了視頻會(huì)話。個(gè)別的DX-VA RenderMoComp函數(shù)代碼在下文中給出。處理設(shè)備丟失情況以下情況將導(dǎo)致驅(qū)動(dòng)程序中的DestroyMoComp入口點(diǎn)被調(diào)用,而仍對(duì)特定的視頻 會(huì)話啟用輸出內(nèi)容保護(hù) 顯示模式改變; 向Windows⑧桌面附加或撤除監(jiān)視器; 進(jìn)入全屏DOS框; 開(kāi)始任何DDraw或D3D專有模式應(yīng)用程序; 快速用戶切換; 從Windows⑧桌面添加或移除監(jiān)視器; 在Windows ; XP專業(yè)版上鎖定工作站或按下Alt-Ctrl-Del ; 通過(guò)“遠(yuǎn)程桌面連接”附加到工作站; 進(jìn)入省電模式,如“待機(jī)”或“休眠”;以及 意外的應(yīng)用程序終止,例如“頁(yè)面錯(cuò)誤”。當(dāng)出現(xiàn)這些情況時(shí),驅(qū)動(dòng)程序應(yīng)當(dāng)將全局保護(hù)級(jí)別計(jì)數(shù)遞減被破壞的設(shè)備的當(dāng)前 局部保護(hù)級(jí)別計(jì)數(shù)。應(yīng)當(dāng)檢查改變的全局保護(hù)級(jí)別,并且相應(yīng)地調(diào)整應(yīng)用到輸出連接器的 保護(hù)。DX-VA 命令以下討論描述了圖形驅(qū)動(dòng)程序所支持的若干命令或函數(shù),尤其是個(gè)別的DX-VA C0PP設(shè)備。COPPOpenVideoSession該函數(shù)初始化用于特定視頻會(huì)話的C0PP DX-VA設(shè)備。HRESULT DXVA_C0PPDeviceClassCOPPOpenVideoSession (DWORD dwDevicelD);COPPPCloseVideoSession該函數(shù)終止用于視頻會(huì)話的C0PP DX-VA設(shè)備。HRESULT DXVA_C0PPDeviceClassCOPPCloseVideoSession ();可能調(diào)用了該函數(shù),而仍由視頻會(huì)話應(yīng)用輸出保護(hù)。驅(qū)動(dòng)程序應(yīng)當(dāng)撤消該DX-VA
15C0PP設(shè)備的保護(hù)設(shè)置,并相應(yīng)地調(diào)整全局保護(hù)設(shè)置。COPPGetCertificateLength這是新創(chuàng)建的COPP DX-VA設(shè)備將接收到的第一個(gè)函數(shù)調(diào)用。它由視頻呈 現(xiàn)組件710用于查詢圖形硬件所使用的證書(shū)的長(zhǎng)度,以字節(jié)表示。驅(qū)動(dòng)程序應(yīng)當(dāng)在 DD-RENDERM0C0MPDATA結(jié)構(gòu)的lpOutputData字段中返回正確的長(zhǎng)度。HRESULT DXVA_COPPDeviceClassCOPPGetCertificateLength([out]DWORD^pCertificateLength);COPPKeyExchange這是新創(chuàng)建的COPP DX-VA設(shè)備將接收的第二個(gè)函數(shù)調(diào)用。驅(qū)動(dòng)程序應(yīng)當(dāng)返 回圖形硬件的可變長(zhǎng)度數(shù)字證書(shū)。DD_RENDERM0C0MPDATA結(jié)構(gòu)的lpOutputData字段 指向 DXVA_C0PPKeyExchange0utput 結(jié)構(gòu);DXVA_COPPVariableLengthData 具有如前一 COPPGetCertificateLength DXVA命令中所指示的證書(shū)所需的空間量。typedef struct_DXVA_COPPSignature{BYTE Signature[256]; }DXVA_C0PPSignature, *LPDXVA_C0PPSignature ;typedef struct_DXVA_COPPVariableLengthData{DWORD Size ;BYTE Data [4];} DXVA_COPPVariableLengthData,*LPDXVA_COPPVariableLengthData ;typedef struct_DXVA_C0PPKeyExchange0utput{DWORDRandomNumber ;DXVA_COPPVariableLengthData Certificate ;} DXVA_C0PPKeyExchange0utput,*LPDXVA_C0PPKeyExchange0utput ;HRESULT DXVA_C0PPDeviceClass::COPPKeyExchange ([out]DWORD^pdwRandom,[out]DXVA_C0PPVar i ab1eLengthData^pGHCert i fi cate);COPPSequenceStart這是新創(chuàng)建的DX-VA COPP設(shè)備將接收的第三個(gè)函數(shù)調(diào)用。驅(qū)動(dòng)程序?qū)⒔邮?28位 隨機(jī)數(shù)據(jù)完整性會(huì)話密鑰、32位隨機(jī)起始狀態(tài)序列號(hào)和32位隨機(jī)起始命令序列號(hào)的串接, 用圖形硬件的公鑰加密。如果在接收COPPKeyExchange函數(shù)調(diào)用前接收這一函數(shù)調(diào)用,或 如果接收了后續(xù)的XOPPSequenceStart調(diào)用,則驅(qū)動(dòng)程序應(yīng)當(dāng)返回E_UNEXPECTED。HRESULT DXVA_C0PPDeviceClassCOPPSequenceStart ([in]DXVACOPPSignature^pSeqStartlnfo);COPPCommandCOPP命令可包括來(lái)自視頻會(huì)話的指令,以改變與DX-VA C0PP設(shè)備相關(guān)聯(lián)的物理 連接器上的保護(hù)級(jí)別。如上所述,驅(qū)動(dòng)程序應(yīng)當(dāng)能夠支持多個(gè)視頻會(huì)話,它們都通過(guò)同一物
16理連接器回放內(nèi)容。typedef struct_DXVACOPPCommand{GUID macKDI ;//16 字節(jié)GUID guidCommandID ; //16 字節(jié)DWORD dwSequence ;//4 字節(jié)DWORD cbSizeData ;//4 字節(jié)BYTE CommandData [4056] ;//4056 字節(jié)(4056+4+4+16+16 = 4096)}DXVA_COPPCommand,*LPDXVA_COPPCommand ;typedef struct_DXVA_COPPSetProtectionLevelCmdData{DWORD ProtType ;DWORD ProtLevel ; }DXVA_COPPSetProtectionLevelCmdData ;DEFINE_GUID(DXVA_COPPSetProtectionLevel,0x9bb9327c,0x4eb5,0x4727,0x9f,0x00,0xb4,0x2b,0x09,0x19,OxcO,Oxda);HRESULT DXVA_COPPDeviceClass::COPPCommand([in ]DXVA_COPPCommand氺pCommand);如果在接收COPPKeyExchange或COPPSequenceStart函數(shù)調(diào)用之前接收了該函數(shù) 調(diào)用,驅(qū)動(dòng)程序應(yīng)當(dāng)返回E_UNEXPECTED。同樣,驅(qū)動(dòng)程序應(yīng)當(dāng)確保傳遞到它的參數(shù)對(duì)使用的 給定物理連接器是有效的。如果傳遞到COPPCommand的一個(gè)或多個(gè)參數(shù)是無(wú)效的,則驅(qū)動(dòng) 程序應(yīng)當(dāng)返回E_INVALIDARG。下表列出了依照本實(shí)施例驅(qū)動(dòng)程序可看見(jiàn)的DX-VA COPP命令集。 定義的COPP命令COPPQueryStatusCOPPQueryStatus是來(lái)自視頻會(huì)話的請(qǐng)求,它檢索關(guān)于所使用的物理連接器、可 應(yīng)用到通過(guò)物理連接器發(fā)送的內(nèi)容的保護(hù)類型、以及物理連接器上活動(dòng)的當(dāng)前保護(hù)級(jí)別的 信息。對(duì)于調(diào)用應(yīng)用的順序的相同的限制為如果在此視頻會(huì)話的COPPKeyExchange或 COPPSequenceStart調(diào)用之前接收到此調(diào)用,則驅(qū)動(dòng)程序應(yīng)當(dāng)返回E_UNEXPECTED。typedef struct_DXVA_C0PPStatusInput{GUID rApp ;//16 字節(jié)
GUID guidStatusReguestID ; //16 字節(jié)DWORD dwSequence ;//4 字節(jié)DWORD cbSizeData ;//4 字節(jié)BYTE StatusData [4056] ;//4056 字節(jié)(4056+4+4+16+16 = 4096)} DXVA_COPPStatus Input,*LPDXVA_COPPStatus Input ;typedef struct_DXVA_COPPStatusOutput{GUID macKDI ;//16 字節(jié)DWORD cbSizeData ;//4 字節(jié)BYTE COPPStatus [4076] ;//4076 字節(jié)(4076+16+4 = 4096)}DXVA_COPPStatusOutput,*LPDXVA一COPPStatusOutput ;HRESULT DXVA_COPPDeviceClassCOPPQueryStatus([out]DXVA_COPPStatusInput^pInput,[out]DXVA_C0PPStatus0utput氺pOutput);下表列出了依照本實(shí)施例驅(qū)動(dòng)程序應(yīng)當(dāng)見(jiàn)到的一組DX-VA 狀態(tài)請(qǐng)求。用戶樽式API的DDI映射 在這一特定的實(shí)現(xiàn)實(shí)例中,并且為了與Windows 操作系統(tǒng)的DDI基礎(chǔ)結(jié)構(gòu)兼容, 本文檔中先前描述的API必須被“映射”到DirectDraw和DirectX VA現(xiàn)有的DDI。如本領(lǐng) 域的技術(shù)人員所理解的,這些映射操作有助于避免對(duì)內(nèi)核模式組件作出重大的改變。由此, 本節(jié)和以下討論描述了映射到現(xiàn)有的DirectDraw和DX-VADDI的COPP接口。DX-VA DDI本身被分割成兩個(gè)功能組“DX_VA容器”和“DX-VA設(shè)備”。DX-VA容器 DDI組的目的是確定顯示硬件包含的各種DX-VA設(shè)備的數(shù)量和性能。因此,在本實(shí)現(xiàn)示例 中,一個(gè)DX-VA驅(qū)動(dòng)程序只能有一個(gè)容器,但是它可支持多個(gè)DX-VA設(shè)備。本節(jié)的其余部分描述了如何將上述接口映射到DX-VA設(shè)備DDI。應(yīng)當(dāng)注意,與其它 DX-VA DDI不同,COPP設(shè)備從不引用任何視頻存儲(chǔ)器表面。從用戶樽式組件調(diào)用DDI從用戶模式組件,如視頻呈現(xiàn)組件710 (圖7)使用DDI的步驟順序如下1.調(diào)用GetMoCompGuids以獲取驅(qū)動(dòng)程序所支持的DX-VA設(shè)備。2.調(diào)用CreateMoComp以為視頻會(huì)話建立COPP設(shè)備,其中,COPP設(shè)備⑶ID定義如 下DEFINE_GUID(DXVA_COPPDevice,0xd2457add,0x8999,0x45ed,0x8a,0x8a,Oxdl,Oxaa,0x04,0x7b,0xa4,0xd5);3.視頻呈現(xiàn)組件然后用取決于所請(qǐng)求的COPP操作的類型的各種函數(shù)參數(shù)值調(diào)用 COPP 設(shè)備的 RenderMoComp。4.當(dāng)視頻呈現(xiàn)組件不再需要執(zhí)行任何COPP操作時(shí),它調(diào)用DestroyMoComp。5.驅(qū)動(dòng)程序釋放COPP設(shè)備所使用的任何資源。COPPOpenVideoSession該方法直接映射到DD_M0TI0NC0MPCALLBACKS結(jié)構(gòu)的CreateMoComp方法,其中, ⑶ID是COPP設(shè)備⑶ID,pUncompData指向不包含任何數(shù)據(jù)(全0)的結(jié)構(gòu),pData指向NULL。應(yīng)當(dāng)理解和明白,如果驅(qū)動(dòng)程序支持壓縮視頻的加速解碼,則視頻呈現(xiàn)組件將調(diào) 用驅(qū)動(dòng)程序來(lái)創(chuàng)建兩個(gè)DX-VA設(shè)備一一個(gè)執(zhí)行由DirectX VA視頻解碼規(guī)范定義的實(shí)際視 頻解碼工作,另一個(gè)嚴(yán)格地用于遵循內(nèi)容輸出保護(hù)協(xié)議向輸出連接器應(yīng)用保護(hù)。示例將 CreateMoComp 映射到 COPPOpenVideoSession以下提供的示例代碼示出了驅(qū)動(dòng)程序應(yīng)當(dāng)如何將CreateMoComp DDI調(diào)用映射到 COPPOpenVideoSession。示例代碼僅示出了如何對(duì)COPP使用CreateMoComp函數(shù)。如果驅(qū) 動(dòng)程序支持其它DX-VA功能,如解碼MPEG-2視頻幀,則以下示例代碼可被擴(kuò)充以包括額外 的DX-VA GUID的處理。DWORD APIENTRYCreateMoComp (LPDDHAL_CREATEM0C0MPDATA IpData){AMTRACE((TEXT(" CreateMoComp")));if( ! ValidDXVAGuid(IpData- > IpGuid))
{DbgLog((L0G_ERR0R,1,TEXT(〃 No formats supported for this GUID〃 )));IpData- > ddRVal = E_INVALIDARG ;return DDHAL_DRIVER_HANDLED ;}if (*lpData- > IpGuid = = DXVA_COPPDevice){DXVA_COPPDeviceClass*lpDev =new DXVA_COPPDeviceClass (*lpData_ > IpGuid, DXVA_DeviceCOPP);if (IpDev){DWORD DevID = (DffORD)-I ;IpData- > ddRVal = E_INVALIDARG ;if (DevID ! = (DffORD)-I){IpData- > ddRVal = IpDev- > COPPOpenVideoSession (DevID);}if (IpData- > ddRVal ! = DD_0K){delete IpDev ;IpDev = NULL ;}}else{IpData- > ddRVal = E_0UT0FMEM0RY ;}IpData- > IpMoComp- > IpDriverReservedl =(LPVOID)(DXVA_DeviceBaseClass*)IpDev ;return DDHAL_DRIVER_HANDLED ;}IpData- > ddRVal = DDERR_CURRENTLYNOTAVAIL ;return DDHAL_DRIVER_HANDLED ;}示例實(shí)現(xiàn) GetMoCompGuids除CreateMoComp函數(shù)之外,驅(qū)動(dòng)程序應(yīng)當(dāng)也實(shí)現(xiàn)DD_M0T10NC0MPCALLBACKS結(jié)構(gòu)的GetMoCompGuids方法。以下示例代碼示出了在驅(qū)動(dòng)程序中實(shí)現(xiàn)這一功能的一個(gè)可能的方法。
DWORD g_dwDXVANumSupport e dGU ID s = 1 ;const GUID*g_DXVASupportedGUIDs[1] = {&DXVA_COPPDevice
};DWORD APIENTRYGetMoCompGuids (PDD_GETMOCOMP⑶IDSDATA IpData){DWORD dwNumToCopy ;if (IpData- > IpGuids) {dwNumToCopy = min(g_dwDXVANumSupportedGUIDs,IpData- > dwNumGuids);for (DWORD i = O ;i < dwNumToCopy ;i++) {IpData- > IpGuids[i] = *g_DXVASupportedGUIDs[i];}}else{dwNumToCopy = g_dwDXVANumSupportedGUIDs ;}IpData- > dwNumGuids = dwNumToCopy ;IpData- > ddRVal = DD_0K ;return DDHAL_DRIVER_HANDLED ;COPPGetCertificateLenRth本發(fā)明直接映射到D_M0TI0NC0MPCALLBACKS結(jié)構(gòu)的RenderMoComp方法,其中^dwNumBufTersSO0· IpBufferInfo 為 NULL。· dwFunction 被定義為 DXVA_COPPGetCertificateLengthFnCode。· IpInputData 為 NULL。· IpOutputData 指向單個(gè) DWORD。注意,對(duì)于用于COPP的DX-VA設(shè)備,將調(diào)用RenderMoComp而不調(diào)用 BeginMoCompFrame 或 EndMoCompFrame0示例將 RenderMoComp 映射到 COPPGetCertificateLenRth以下示例代碼示出了驅(qū)動(dòng)程序應(yīng)當(dāng)如何將RenderMoComp DDI調(diào)用映射到 COPPGetCertificateLength調(diào)用。示例代碼僅示出了如何對(duì)COPP控制使用RenderMoComp。 如果驅(qū)動(dòng)程序支持其它DX-VA功能,如解碼MPEG-2視頻流,則示例代碼可被擴(kuò)充以包括額 外的DX-VA GUID的處理。DWORD APIENTRYRenderMoComp (
LPDDHAL_RENDERMOCOMPDATA IpData){AMTRACE((TEXT(" RenderMoComp“)));DXVA_DeviceBaseClass*pDXVABase =(DXVA_DeviceBaseClass*) IpData- > IpMoComp- > IpDriverReservedl ;if (pDXVABase = = NULL) {IpData- > ddRVal = E_P0INTER ;return DDHAL_DRIVER_HANDLED ;}
switch(pDXVABase- > m_DeviceType){case DXVA_DeviceCOPP:{DXVA_COPPDeviceClass*pDXVACopp =(DXVA_COPPDeviceClass*) IpData- > IpMoComp- > IpDriverReservedl ;switch (lpData- > dwFunction){case DXVA_COPPGetCertificateLengthFnCode:{if (lpData- > dwOutputDataSize < sizeof (DWORD)){lpData- > ddRVal = E_INVALIDARG ;}else{lpData- > ddRVal = pDXVACopp- > COPPGetCertificateLength ((DWORD*)lpData- > IpOutputData);}}break ;COPPKeyExchanRe該方法直接映射到D_MOTIONCOMPCALLBACKS結(jié)構(gòu)的RenderMoComp方法,其中參 dwNumBuffers 為 O。參 IpBufferInfo 為 NULL。· dwFunction 被定義為 DXVA_COPPKeyExchangeFnCode。· IpInputData 為 NULL。· IpOutputData 指向 DXVA_COPPKeyExchangeOutput 數(shù)據(jù)結(jié)構(gòu)。注意,對(duì)于用于COPP的DX-VA設(shè)備,將調(diào)用RenderMoComp而不調(diào)用 BeginMoCompFrame 或 EndMoCompFrame0
示例將 RenderMoComp 映射至丨丨 COPPKeyExchange以下示例代碼示出了驅(qū)動(dòng)程序應(yīng)當(dāng)如何將RenderMoComp DDI調(diào)用映射到 COPPKeyExchange調(diào)用。示例代碼僅示出了如何對(duì)COPP控制使用RenderMoComp。如果驅(qū)動(dòng) 程序支持其它DX-VA功能,如解碼MPEG-2視頻流,則示例代碼可被擴(kuò)充以包括額外的DX-VA ⑶ID的處理。case DXVA_COPPKeyExchangeFnCode{DXVA_COPPKeyExchangeOutput*lpout =(DXVA_COPPKeyExchangeOutput*)IpData- > IpOutputData ;IpData- > ddRVal = pDXVACopp- > COPPKeyExchange (&lpout_ > RandomNumber,&lpout_ > Certificate);}break ;COPPSequenceStart該方法直接映射到D_M0TI0NC0MPCALLBACKS結(jié)構(gòu)的RenderMoComp方法,其中參 dwNumBuffers 為 O?!?IpBufferInfo 為 NULL?!?dwFunction 被定義為 DXVA_COPPSequenceStartFnCode。· IpInputData 指向 DXVA_COPPSignature 數(shù)據(jù)結(jié)構(gòu)。· IpOutputData 為 NULL。注意,對(duì)于用于COPP的DX-VA設(shè)備,將調(diào)用RenderMoComp而不調(diào)用BeginMoCompFrame 或 EndMoCompFrame0示例將 RenderMoComp 映射至Ij COPPSequenceStart以下示例代碼示出了驅(qū)動(dòng)程序應(yīng)當(dāng)如何將RenderMoComp DDI調(diào)用映射到 COPPSequenceStart調(diào)用。示例代碼僅示出了如何對(duì)COPP控制使用RenderMoComp。如果 驅(qū)動(dòng)程序支持DX-VA其它功能,如解碼MPEG-2視頻流,則示例代碼可被擴(kuò)展以包括額外的 DX-VA GUID 的處理。case DXVA_COPPSequenceStartFnCode{DXVA_COPPSignature*lpin =(DXVA_COPPSignature*)IpData- > IpInputData ;IpData- > ddRVal = pDXVACopp- > COPPSequenceStart (Ipin);}break ;COPPCommand本方法直接映射到D_M0TI0NC0MPCALLBACKS結(jié)構(gòu)的RenderMoComp方法,其中^dwNumBufTersSO0· IpBufferInfo 為 NULL。
· dwFunction 被定義為 DXVA_COPPCommandFnCode?!?IpInputData 指向 DXVA_COPPCommand 數(shù)據(jù)結(jié)構(gòu)?!?IpOutputData 為 NULL。注意,對(duì)于用于COPP的DX-VA設(shè)備, 將調(diào)用RenderMoComp而不調(diào)用 BeginMoCompFrame 或 EndMoCompFrame0示例將 RenderMoComp 映射至丨丨 COPPCommand以下示例代碼示出了驅(qū)動(dòng)程序應(yīng)當(dāng)如何將RenderMoComp DDI調(diào)用映射到 COPPCommand調(diào)用。示例代碼僅示出了如何對(duì)COPP控制使用RenderMoComp。如果驅(qū)動(dòng)程 序支持其它DX-VA功能,如解碼MPEG-2視頻流,則示例代碼可被擴(kuò)展以包括額外的DX-VA ⑶ID的處理。case DXVA_COPPCommandFnCode{DXVA_COPPCommand*lpin =(DXVA_COPPCommand*)IpData- > IpInputData ;IpData- > ddRVal = pDXVACopp- > COPPCommand(Ipin);}break ;COPPQueryStatus本方法直接映射到D_MOTIONCOMPCALLBACKS結(jié)構(gòu)的RenderMoComp方法,其中眷 dwNumBuffers 為 O。· IpBufferInfo 為 NULL?!?dwFunction 被定義為 DXVA_COPPQueryStatusFnCode?!?IpInputData 指向 DXVA_COPPStatusInput 數(shù)據(jù)結(jié)構(gòu)?!?IpOutputData 指向 DXVA_COPPStatusOutput 數(shù)據(jù)結(jié)構(gòu)。注意,對(duì)于用于COPP的DX-VA設(shè)備,將調(diào)用RenderMoComp而不調(diào)用 BeginMoCompFrame 或 EndMoCompFrame0示例將 RenderMoComp 映射至Ij COPPQueryStatus以下示例代碼示出了驅(qū)動(dòng)程序應(yīng)當(dāng)如何將RenderMoComp DDI調(diào)用映射到 COPPQueryStatus調(diào)用。示例代碼僅示出了如何對(duì)COPP控制使用RenderMoComp。如果驅(qū)動(dòng) 程序支持其它DX-VA功能,如解碼MPEG-2視頻流,則示例代碼可被擴(kuò)展以包括額外的DX-VA ⑶ID的處理。case DXVA_COPPQueryStatusFnCode {DXVA_COPPStatusInput*lpin = (DXVA_COPPStatusInput*)IpData- > IpInputData ;DXVA_COPPStatusOutput*lpout = (DXVA_COPPStatusOutput*)IpData- > IpOutputData ;IpData- > ddRVal = pDXVACopp- > COPPQueryStatus (lpin, lpout);}
break ;default:IpData- > ddRVal = E_INVALIDARG ;break ;
}break ;}}return DDHAL_DRIVER_HANDLED ;}COPPCloseVideoSession本方法直接映射到D_M0TI0NC0MPCALLBACKS 結(jié)構(gòu)的 DestroyMoComp 方法。示例將 DestroyMoComp 映射到 COPPCloseVideoSesion以下示例代碼示出了驅(qū)動(dòng)程序應(yīng)當(dāng)如何將DestroyMoComp DDI調(diào)用映射到 COPPCloseVideoSession調(diào)用。示例代碼僅示出了如何對(duì)COPP控制使用DestroyMoComp。 如果驅(qū)動(dòng)程序支持其它DX-VA功能,如解碼MPEG-2視頻流,則示例代碼可被如下擴(kuò)展以包 括額外的DX-VA⑶ID的處理。DWORD APIENTRYDestroyMoComp (LPDDHAL_DESTROYMOCOMPDATA IpData){AMTRACE((TEXT(“ DestroyMoComp“)));DXVA_DeviceBaseClass*pDXVABase =(DXVA_DeviceBaseClass*) IpData- > IpMoComp- > IpDriverReservedl ;if (pDXVABase = = NULL) {IpData- > ddRVal = E_P0INTER ;return DDHAL_DRIVER_HANDLED ;}switch(pDXVABase- > m_DeviceType){case DXVA_DeviceContainer:case DXVA_DeviceDecoder:case DXVA_DeviceDeinterlacer:case DXVA_DeviceProcAmpControl:IpData- > ddRVal = DDERR_CURRENTLYNOTAVAIL ;break ;case DXVA_DeviceCOPP:{DXVA_COPPDeviceClass*pDXVADev = (DXVA_C0PPDeviceClass*)pDXVABase ;
IpData- > ddRVal = pDXVADev- > COPPCloseVideoSession ();delete pDXVADev ;}break ;} 上述各種實(shí)施例通過(guò)在諸如運(yùn)行受保護(hù)內(nèi)容回放應(yīng)用程序的計(jì)算機(jī)等設(shè)備,和相 關(guān)聯(lián)的顯示設(shè)備的諸如圖形驅(qū)動(dòng)程序等相關(guān)聯(lián)的驅(qū)動(dòng)程序之間建立一安全信道,并在某些 實(shí)施例中建立安全數(shù)據(jù)信道,啟用了媒體內(nèi)容保護(hù),相關(guān)聯(lián)的顯示設(shè)備如監(jiān)視器、平板LCD、 電視機(jī)等等。各種實(shí)施例通過(guò)使用物理地鏈接計(jì)算機(jī)及其顯示設(shè)備的輸出適配器作為受保 護(hù)的視頻路徑的網(wǎng)關(guān),解決了內(nèi)容提供商和應(yīng)用程序銷售商發(fā)信號(hào)通知應(yīng)當(dāng)向媒體輸出施 加內(nèi)容保護(hù)的需求。各種實(shí)施例提供了安全地將命令從源用戶模式回放應(yīng)用程序傳遞到諸如圖形驅(qū) 動(dòng)程序等驅(qū)動(dòng)程序,并安全地將狀態(tài)從驅(qū)動(dòng)程序返回到用戶模式應(yīng)用程序的裝置。所描述 的實(shí)施例建立了一安全通信信道,并允許用戶模式應(yīng)用程序指令相關(guān)聯(lián)的驅(qū)動(dòng)程序在計(jì)算 機(jī)和顯示設(shè)備之間的連接器上啟用內(nèi)容輸出保護(hù)。盡管以對(duì)結(jié)構(gòu)特征和/或方法步驟專用的語(yǔ)言描述了本發(fā)明,然而可以理解,所 附權(quán)利要求書(shū)中定義的本發(fā)明不限于所描述的具體特征或步驟。相反,揭示了具體特征和 步驟作為實(shí)現(xiàn)本發(fā)明的較佳形式。
權(quán)利要求
一種方法,其特征在于,它包括在一媒體回放應(yīng)用程序和一下游組件之間建立信任;使用與所述下游組件相關(guān)聯(lián)的公鑰在所述媒體回放應(yīng)用程序和所述下游組件之間建立一安全信道,以加密由所述下游組件提供的一隨機(jī)數(shù);一數(shù)據(jù)完整性密鑰;以及一個(gè)或多個(gè)起始號(hào);將所加密的數(shù)據(jù)發(fā)送到所述下游組件;使用所述安全信道將一命令消息發(fā)送到所述下游組件,所述命令消息包括一包含命令的數(shù)據(jù)段,以及一包含可用于認(rèn)證所述命令的數(shù)據(jù)的認(rèn)證段;使用所述安全信道向所述下游組件請(qǐng)求狀態(tài)信息;以及使用所述安全信道從所述下游組件接收狀態(tài)消息,所述狀態(tài)消息包括一包含狀態(tài)信息的數(shù)據(jù)段,以及一包含可用于認(rèn)證所述狀態(tài)信息的數(shù)據(jù)的認(rèn)證段。
2.如權(quán)利要求1所述的方法,其特征在于,所述一個(gè)或多個(gè)起始號(hào)包括一起始狀態(tài)序 列號(hào)和一起始命令序列號(hào),所述號(hào)碼可用于分別確定狀態(tài)消息或命令消息是否丟失。
3.如權(quán)利要求1所述的方法,其特征在于,使用所述安全信道向所述下游組件請(qǐng)求狀 態(tài)信息的所述動(dòng)作包括用所述請(qǐng)求發(fā)送一隨機(jī)數(shù),并且,所述狀態(tài)消息的認(rèn)證段包括與所 述隨機(jī)數(shù)相關(guān)聯(lián)的數(shù)據(jù)。
4.如權(quán)利要求1所述的方法,其特征在于,所述命令消息和所述狀態(tài)消息的認(rèn)證段包 括使用所述數(shù)據(jù)完整性密鑰來(lái)處理的數(shù)據(jù)。
5.如權(quán)利要求1所述的方法,其特征在于,所述命令消息包含命令,它指令所述下游組 件啟用多種不同類型的內(nèi)容保護(hù)技術(shù)的一個(gè)或多個(gè),來(lái)保護(hù)通過(guò)物理連接器提供的媒體內(nèi) 容。
6.如權(quán)利要求1所述的方法,其特征在于,所述下游組件包括軟件驅(qū)動(dòng)程序。
7.一種或多種具有計(jì)算機(jī)可讀指令的計(jì)算機(jī)可讀介質(zhì),當(dāng)所述指令被執(zhí)行時(shí),實(shí)現(xiàn)權(quán) 利要求1所述的方法。
8.一種包含權(quán)利要求7所述的一種或多個(gè)計(jì)算機(jī)可讀介質(zhì)的計(jì)算機(jī)系統(tǒng)。
9.如權(quán)利要求1所述的方法,其特征在于,它還包括使用所述安全信道以向所述下游 組件提供受保護(hù)的媒體內(nèi)容。
10.一種系統(tǒng),其特征在于,它包括 一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì);一駐留在所述介質(zhì)上的軟件組件,它被配置成 建立與一媒體回放應(yīng)用程序的信任;通過(guò)向所述媒體回放應(yīng)用程序提供一與所述軟件組件相關(guān)聯(lián)的公鑰,并從所述媒體回 放應(yīng)用程序接收回用所述公鑰加密的已加密數(shù)據(jù),建立與所述媒體回放應(yīng)用程序有關(guān)的安 全信道,所述已加密數(shù)據(jù)包括一先前由所述軟件組件提供的隨機(jī)數(shù); 一數(shù)據(jù)完整性密鑰;以及 一個(gè)或多個(gè)起始號(hào);使用所述安全信道從所述媒體回放應(yīng)用程序接收命令消息,所述命令消息包括包含命 令的數(shù)據(jù)段,以及包含可用于認(rèn)證所述命令的數(shù)據(jù)的認(rèn)證段;使用所述安全信道從所述媒體回放應(yīng)用程序接收狀態(tài)請(qǐng)求;以及 使用所述安全信道向所述媒體回放應(yīng)用程序發(fā)送狀態(tài)消息,所述狀態(tài)消息包括包含狀 態(tài)信息的數(shù)據(jù)段,以及包含可用于認(rèn)證所述狀態(tài)信息的數(shù)據(jù)的認(rèn)證段。
11.如權(quán)利要求10所述的系統(tǒng),其特征在于,所述一個(gè)或多個(gè)起始號(hào)包括一起始狀態(tài) 序列號(hào)和一起始命令序列號(hào),所述號(hào)碼可用于分別確定狀態(tài)消息或命令消息是否丟失。
12.如權(quán)利要求10所述的系統(tǒng),其特征在于,所述命令消息和所述狀態(tài)消息的認(rèn)證段 包括使用所述數(shù)據(jù)完整性密鑰處理的數(shù)據(jù)。
13.如權(quán)利要求10所述的系統(tǒng),其特征在于,所述命令消息包含命令,它指令所述軟件 組件啟用多種不同類型內(nèi)容保護(hù)技術(shù)的一個(gè)或多個(gè),以保護(hù)通過(guò)物理連接器提供的媒體內(nèi) 容。
14.如權(quán)利要求10所述的系統(tǒng),其特征在于,所述命令消息包含命令,它指令所述軟件 組件啟用多種不同類型內(nèi)容保護(hù)技術(shù)的一個(gè)或多個(gè),以保護(hù)通過(guò)物理連接器提供的媒體內(nèi) 容,并且,所述軟件組件被配置成啟用多種不同類型內(nèi)容保護(hù)技術(shù)。
15.一種包含權(quán)利要求10所述的系統(tǒng)的計(jì)算系統(tǒng)。
16.一種在計(jì)算機(jī)可讀介質(zhì)上實(shí)施的應(yīng)用編程接口(API),其特征在于,所述API包括第一方法,它可由一媒體回放應(yīng)用程序調(diào)用,用于在所述媒體回放應(yīng)用程序和一軟件 驅(qū)動(dòng)程序組件之間建立信任;第二方法,它可由所述媒體回放應(yīng)用程序調(diào)用,用于在所述媒體回放應(yīng)用程序和所述 軟件驅(qū)動(dòng)程序組件之間設(shè)置一會(huì)話密鑰;第三方法,它可由所述媒體回放應(yīng)用程序調(diào)用,以指令所述軟件驅(qū)動(dòng)程序組件啟用多 種不同類型內(nèi)容保護(hù)技術(shù)的一個(gè)或多個(gè),來(lái)保護(hù)通過(guò)物理連接器提供的媒體內(nèi)容;以及第四方法,它可由所述媒體回放應(yīng)用程序調(diào)用,以向所述軟件驅(qū)動(dòng)程序組件請(qǐng)求狀態(tài) fn息o
17.如權(quán)利要求16所述的API,其特征在于,所述第一方法接收回由所述軟件驅(qū)動(dòng)程序 生成的隨機(jī)數(shù)以及一數(shù)字證書(shū)。
18.如權(quán)利要求16所述的API,其特征在于,所述第二方法提供一經(jīng)加密的串接,它串 接了由圖形硬件提供的隨機(jī)數(shù)、一個(gè)或多個(gè)會(huì)話密鑰、起始狀態(tài)序列號(hào)、起始命令序列號(hào)。
19.如權(quán)利要求16所述的API,其特征在于,所述API由視頻呈現(xiàn)組件展示。
20.一種方法,其特征在于,包括調(diào)用一設(shè)備驅(qū)動(dòng)程序,以創(chuàng)建一內(nèi)容保護(hù)設(shè)備的實(shí)例,各個(gè)內(nèi)容保護(hù)設(shè)備與各個(gè)視頻 會(huì)話相關(guān)聯(lián),并擔(dān)當(dāng)與一回放應(yīng)用程序的通信的端點(diǎn),所述回放應(yīng)用程序向所述內(nèi)容保護(hù) 設(shè)備發(fā)送命令和狀態(tài)請(qǐng)求;用所述設(shè)備驅(qū)動(dòng)程序維護(hù)用于保護(hù)內(nèi)容的內(nèi)容保護(hù)的每一類型和級(jí)別的全局引用計(jì)數(shù);用至少一個(gè)內(nèi)容保護(hù)設(shè)備維護(hù)通過(guò)所述內(nèi)容保護(hù)設(shè)備應(yīng)用的內(nèi)容保護(hù)的每一類型和 級(jí)別的局部引用計(jì)數(shù);以及依照變化的內(nèi)容保護(hù)類型或級(jí)別,調(diào)整所述全局和局部引用計(jì)數(shù)。
21.一種軟件體系結(jié)構(gòu),其特征在于,包括 一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì);軟件驅(qū)動(dòng)程序代碼,它包含在所述計(jì)算機(jī)可讀介質(zhì)上,并被配置成實(shí)現(xiàn)多種內(nèi)容保護(hù) 設(shè)備,所述內(nèi)容保護(hù)設(shè)備與各個(gè)視頻會(huì)話相關(guān)聯(lián),并擔(dān)當(dāng)與一回放應(yīng)用程序的通信的端點(diǎn), 所述回放應(yīng)用程序可向所述內(nèi)容保護(hù)設(shè)備發(fā)送命令和狀態(tài)請(qǐng)求,其中,所述軟件驅(qū)動(dòng)程序 代碼包括第一方法,它可被調(diào)用以確定驅(qū)動(dòng)程序?qū)τ谝唤o定輸出連接器是否支持內(nèi)容保護(hù)設(shè)備;第二方法,它可被調(diào)用以創(chuàng)建一相關(guān)聯(lián)的內(nèi)容保護(hù)設(shè)備;以及第三方法,它可被調(diào)用以確定與一圖形硬件證書(shū)相關(guān)聯(lián)的長(zhǎng)度以及開(kāi)始一視頻會(huì)話;其中,各個(gè)內(nèi)容保護(hù)設(shè)備支持以下可調(diào)用方法第一方法,它查詢一圖形硬件證書(shū)長(zhǎng)度;第二方法,它返回一可變長(zhǎng)度圖形硬件數(shù)字證書(shū);第三方法,用于接收數(shù)據(jù)完整性會(huì)話密鑰、起始狀態(tài)序列號(hào)和起始命令序列號(hào)的串接, 它們都用一與所述圖形硬件相關(guān)聯(lián)的公鑰來(lái)加密;第四方法,用于接收一用于改變與所述內(nèi)容保護(hù)設(shè)備相關(guān)聯(lián)的物理連接器上的內(nèi)容保 護(hù)的命令;以及第五方法,用于查詢關(guān)于所使用的物理連接器、可應(yīng)用于通過(guò)所述物理連接器發(fā)送的 內(nèi)容的保護(hù)的類型、以及在所述物理連接器上活動(dòng)的當(dāng)前保護(hù)級(jí)別的信息。
22.如權(quán)利要求21所述的體系結(jié)構(gòu),其特征在于,所述內(nèi)容保護(hù)設(shè)備的第一方法直接 映射到所述軟件驅(qū)動(dòng)程序代碼的第三方法。
23.如權(quán)利要求21所述的體系結(jié)構(gòu),其特征在于,所述內(nèi)容保護(hù)設(shè)備的第二方法直接 映射到所述軟件驅(qū)動(dòng)程序代碼的第三方法。
24.如權(quán)利要求21所述的體系結(jié)構(gòu),其特征在于,所述內(nèi)容保護(hù)設(shè)備的第三方法直接 映射到所述軟件驅(qū)動(dòng)程序代碼的第三方法。
25.如權(quán)利要求21所述的體系結(jié)構(gòu),其特征在于,所述內(nèi)容保護(hù)設(shè)備的第四方法直接 映射到所述軟件驅(qū)動(dòng)程序代碼的第三方法。
26.如權(quán)利要求21所述的體系結(jié)構(gòu),其特征在于,所述內(nèi)容保護(hù)設(shè)備的第五方法直接 映射到所述軟件驅(qū)動(dòng)程序代碼的第三方法。
全文摘要
各種實(shí)施例提供了方法和系統(tǒng),使用一種協(xié)議,通過(guò)在諸如運(yùn)行受保護(hù)內(nèi)容回放應(yīng)用程序的計(jì)算設(shè)備等設(shè)備和下游組件之間建立一安全通信信道,并在某些實(shí)施例中建立一安全數(shù)據(jù)信道,來(lái)啟用媒體內(nèi)容保護(hù),所述下游組件如相關(guān)聯(lián)的顯示設(shè)備的相關(guān)聯(lián)的驅(qū)動(dòng)程序,如圖形驅(qū)動(dòng)程序,所述顯示設(shè)備如監(jiān)視器、平板LED、電視機(jī)等等。
文檔編號(hào)G06F21/00GK101859358SQ20101019245
公開(kāi)日2010年10月13日 申請(qǐng)日期2005年3月11日 優(yōu)先權(quán)日2004年3月11日
發(fā)明者J·M·阿爾克夫, S·J·埃斯特羅普 申請(qǐng)人:微軟公司