用过DRM 7(wmrm)的朋友帮我看一下。程序通过,运行出错。

dvd8x 2002-09-04 05:23:58
WMRMKeysClass KeysObj = new WMRMKeysClass();
WMRMHeaderClass HeaderObj = new WMRMHeaderClass();
WMRMProtectClass ProtectObj = new WMRMProtectClass();


//TextBox1.Text= KeysObj.GenerateKeyID();
//TextBox1.Text=KeysObj.GenerateSeed();
string seed="wangdanwei";
string sKid=KeysObj.GenerateKeyID();
string sCID = KeysObj.GenerateKeyID();
KeysObj.Seed=seed;
KeysObj.KeyID=sKid;
HeaderObj.ContentID=sCID;
string sKey =KeysObj.GenerateKey();
HeaderObj.KeyID=sKid;
HeaderObj.LicenseAcqURL="http://localhost/djtop/asf_li.aspx";
//HeaderObj.SetCheckSum(sKey);
HeaderObj.IndividualizedVersion="2.2";
HeaderObj.SetCheckSum(sKey);
object p="xxxx";
object p2="xxxx";

KeysObj.GenerateSigningKeys(ref p,ref p2);

HeaderObj.Sign(p.ToString());

string header =HeaderObj.Header;
ProtectObj.InputFile= "d:\\a.wma";
ProtectObj.Key=sKey;
ProtectObj.Header=header;
ProtectObj.ProtectFile("d:\\b.wma");

代码如上-》

运行时出错,最后一句:
异常详细信息: System.Runtime.InteropServices.COMException: HRESULT 中的异常:0xC0042914。

源错误:


行 99: ProtectObj.Key=sKey;
行 100: ProtectObj.Header=header;
行 101: ProtectObj.ProtectFile("d:\\b.wma");


我已经搞了一天了,:(,
另有那位高手可以给我一个运行的code么?sample在我的机子上也不可以。
还有一问,有人有7.1不? 多谢谢
...全文
179 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
dvd8x 2002-09-06
  • 打赏
  • 举报
回复
多谢谢朋友们的帮助!!!
我马上就试一下。
Hogwarts 2002-09-06
  • 打赏
  • 举报
回复
To dvd8x:

的确是ASP.NET运行权限的问题。你可以用身份模拟的办法来调整WebForm运行所用的用户以获得更大权限(WinXP和Win2000都适用)。具体可以参考这篇文章:http://www.microsoft.com/china/community/article.asp?oBODY=TechZone/TechArticle/TechDoc/impersonation&oXSLT=TechZone/TechArticle/TechContent



Hogwarts - S(u)ddenly dis@ppeared...
-
本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
dvd8x 2002-09-06
  • 打赏
  • 举报
回复
to :wanghu(不懂就是不懂)
我没有你的问题。我用的wmp 7.1. 刚下的。
不过第一次打开的时候 是要到MS的网上要 一个什么号来唯一表示你的机器
我没细看。 你的HeaderObj.LicenseAcqURL="http://localhost/djtop/asf_li.aspx";
没有写错吧?
另,问一个不好意思的问题。可以从你这copy一分sdk7.1么?
多谢谢朋友们。win2k真好。xp真不能在上面做开发。 :(
dvd8x 2002-09-06
  • 打赏
  • 举报
回复
专家说的是有道理的。不加v1keyid是不可以
现在我的问题基本没有了,我写一个windows form的应用程序,可以package,
但在是webform (aspx)里不可以, 试了很长时间 , 最后找了一台
win2k,ftp 上后,运行可以,我是说我的asp.net 可以运行了。
我看了看文档,可能这个不知名的错是目录权限这原因,因为
SDK上说要目录是everyone 可以写的。我用的xp,目录里没有
安全这一项。也没有看到everyone这个东西。说是已经存在了
如果你想加入一个every的话。就是看不到 :(
所以也没有办法指定一个目录为everyone 可写。请用xp的朋友
可有高招?
wanghu 2002-09-06
  • 打赏
  • 举报
回复
谢谢微软专家的帮助。不过还是有问题:
用package.asp打包文件后,生成一个test.mpg文件
没有放在虚拟目录下,我直接用media player播放
但是窗口一下跳到一个页面,提示我要对media player进行升级
我按照提示将player升级到media player9beta (for 2000)
但是此后这个升级提示窗口荏仍然跳出,why?
双击test.mpg则打开了media player,提示"you need a license
to perform the requested operation on this media file"
license server我都按照wmrm7.1 sdk 的quick start激活了啊?
Hogwarts 2002-09-05
  • 打赏
  • 举报
回复
首先非常高兴您有兴趣尝试微软的Digital Rights Management技术。

具体的,对于你遇到的错误信息,的确是一个文档中没有记载到的问题。简单的说,在调用ProtectObj.ProtectFile之前还必须手工设定V1KeyID,令ProtectObj.V1KeyID = sKID(这里的sKID就是前面赋给HeaderObj.KeyID的值)。您不妨尝试一下。

另外,从您的问题来看,你还没有成功运行DRM。这里我提供一份简单的笔记以供参考:
1)整个DRM架构里面一共有四个角色:License Server、Content Packager、Content Distributer和Consumer。
2)首先,要架设License Server,架设的步骤是:
a)访问http://licenseserver.windowsmedia.com/,申请Certificate,email会返回一个token,返回申请页面complete即可
b)下载latest license server information,升级服务器
c)安装WMRM SDK 7.1
d)生成License Service(也就是写一些ASP页面,可以参考SDK中的例子),配置Key Seed等
3)编写Content Packager
a)Content Packager可以用任何语言编写,包括ASP,也可以用VB、C#等。
b)编写前先要下载安装WMRM SDK 7.1
c)编写的时候需要注意,WMRM SDK 7.1的文档里面有关packaging的例子代码中有两个错误,一个错误是调用HeaderObj.Sign之前需要先调用WMRMHeader.SetCheckSum;另一个错误就是调用ProtectObj.ProtectFile之前还必须手工设定V1KeyID。
4)把打包过的Content(比如wmv文件等)放到Content Distributer上。Content Distributer就是一个简单的Media Service或者IIS,不需要任何额外的配置。
5)完成以上步骤以后,就可以在Consumer上用Media Player来访问了,唯一的前提条件是Consumer的机器必须能访问到License Server。Consumer机器并不一定需要做Individualization,但是可以在Packaging的时候对客户端机器的Individualization级别做出规定,因为如果客户端的Individualization不升级到2.0,有一个DRM的cracker程序可以在客户端破解打包过的Content。

在上面的五个步骤中,License Server和Content Packager需要一些编程工作,具体代码太比较冗长,可以参考WMRM SDK中的例子。


Hogwarts - S(u)ddenly dis@ppeared...
-
本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
dvd8x 2002-09-05
  • 打赏
  • 举报
回复
没有人知道? :*(
Hogwarts 2002-09-05
  • 打赏
  • 举报
回复
下面是用上面那段源码进行packaging成功以后生成的日志文件的内容:

Packaging Log 2/8/2002 3:34:19 PM

[]input file] C:\Home\Media\ly1_v8_1220_vbr.wmv
[output file] C:\Home\Media\output_ly1_v8_1220_vbr.wmv
[seed] 16kZ5DVo0ueSMLHujPX9dHTnHcvOOepG7iI38OqN
[key ID] OV/harp5cUOXErvcTJGKIg==
[content key] FiXKP!fBJw==
[content id] 9cV7muZJ10SWDoELaMzDaA==
[header public key] wZlRKC85Fv0teiZLFmMkZGq4ygxEwtg*F1M!ZF0vKSYpHND73299MA==
[header private key] 1g4Wv9W5ZE!hebPNMuWIKZxuHEg=
[license url] http://xbox-zheng/wm/simple.asp

谨供参考。


Hogwarts - S(u)ddenly dis@ppeared...
-
本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
Hogwarts 2002-09-05
  • 打赏
  • 举报
回复
To wanghu:
前面讲到的setchecksum和设定protectObj.V1KeyID的问题是存在于WMRM SDK文档中的例子代码中的,关于这点有一篇公开的KB谈及,编号是Q297170。在WMRM SDK附带的Sample中的确没有这两个问题:在Sample目录下的package.asp中,的确已经有call headObj.SetCheckSum(key)和protectObj.V1KeyID = kid语句了。

另外,DRM对媒体文件的打包是和ASF文件格式紧紧相关的,只能用于WMV、ASF、WMA等格式。具体的,可以到这个地址察看DRM 7所支持的文件格式类型:http://www.microsoft.com/windows/windowsmedia/WM7/DRM/FAQ.asp

To dvd8x:
这里有一段可以在WinXP上正常工作的Packager的VB6源码。程序比较长,其中包含了以下几部分:
1)Seed生成(CommandGenerateSeed_Click()函数)
2)Key ID、Content Key、Content ID、Header Public Key、Header Private Key的生成(CommandGenerateAll_Click()函数)
3)输入Input File、Output File和License Server URL的地址(分别是TextFile、TextOutputFile和TextLicenseURL文本框)
4)打包并生成日志(Command1_Click()函数)
下面是完整的源码:

'源码开始

Dim sURL, sKID, sCID, sSeed, sKey, sHeader
Dim sPrivKey, sPubKey

Dim HeaderObj As WMRMHeader
Dim KeysObj As WMRMKeys
Dim ProtectObj As WMRMProtect

Private Sub Command1_Click()
ProtectObj.ProtectFile (Form1.TextOutputFile)

Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("DRMPackagingLog.txt", True)
sLog = "Packaging Log " & Date & " " & Time & Chr$(13) & Chr$(10) & Chr$(13) & Chr$(10) & _
"[]input file] " & Form1.TextFile & Chr$(13) & Chr$(10) & _
"[output file] " & Form1.TextOutputFile & Chr$(13) & Chr$(10) & _
"[seed] " & Form1.TextSeed & Chr$(13) & Chr$(10) & _
"[key ID] " & Form1.TextKeyID & Chr$(13) & Chr$(10) & _
"[content key] " & Form1.TextContentKey & Chr$(13) & Chr$(10) & _
"[content id] " & Form1.TextContentID & Chr$(13) & Chr$(10) & _
"[header public key] " & Form1.TextHeaderPublickey & Chr$(13) & Chr$(10) & _
"[header private key] " & Form1.TextHeaderPrivateKey & Chr$(13) & Chr$(10) & _
"[license url] " & Form1.TextLicenseURL & Chr$(13) & Chr$(10)
a.write (sLog)
a.Close

MsgBox ("Packaging Finished." & Chr$(13) & Chr$(10) & " Log File: DRMPackagingLog.txt")

End Sub

Private Sub CommandGenerateAll_Click()

sKID = KeysObj.GenerateKeyID
KeysObj.KeyID = sKID
sKey = KeysObj.GenerateKey()
sCID = KeysObj.GenerateKeyID()
HeaderObj.KeyID = sKID
HeaderObj.ContentID = sCID
Call KeysObj.GenerateSigningKeys(sPrivKey, sPubKey)
HeaderObj.IndividualizedVersion = "2.2"
HeaderObj.LicenseAcqURL = Form1.TextLicenseURL.Text

HeaderObj.SetCheckSum (sKey)
HeaderObj.Sign (sPrivKey)
sHeader = HeaderObj.Header
ProtectObj.Header = sHeader
ProtectObj.Key = sKey
ProtectObj.InputFile = Form1.TextFile.Text
ProtectObj.V1KeyID = sKID

Form1.TextKeyID = sKID
Form1.TextContentID = sCID
Form1.TextContentKey = sKey
Form1.TextHeaderPrivateKey = sPrivKey
Form1.TextHeaderPublickey = sPubKey

Form1.Command1.Enabled = True

End Sub

Private Sub CommandGenerateSeed_Click()

sSeed = KeysObj.GenerateSeed
Form1.TextSeed.Text = sSeed
KeysObj.Seed = sSeed

Form1.CommandGenerateAll.Enabled = True
Form1.Command1.Enabled = False

Form1.TextKeyID = ""
Form1.TextContentID = ""
Form1.TextContentKey = ""
Form1.TextHeaderPrivateKey = ""
Form1.TextHeaderPublickey = ""

End Sub

Private Sub Form_Load()

Set HeaderObj = New WMRMHeader
Set KeysObj = New WMRMKeys
Set ProtectObj = New WMRMProtect

End Sub


Private Sub Form_Unload(Cancel As Integer)

Set HeaderObj = Nothing
Set KeysObj = Nothing
Set ProtectObj = Nothing

End Sub

Private Sub TextSeed_Change()

Form1.CommandGenerateAll.Enabled = True

sSeed = Form1.TextSeed.Text
KeysObj.Seed = sSeed

End Sub

'源码结束


Hogwarts - S(u)ddenly dis@ppeared...
-
本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
coollzh 2002-09-05
  • 打赏
  • 举报
回复
下面加密文件的代码都一样
coollzh 2002-09-05
  • 打赏
  • 举报
回复
我的程序也是只能加密wma和asf文件,加密别的媒体文件也是出错如mp3,
代码和你写得差差不多:
下面是部分代码:

private WMRMOBJSLib.WMRMKeys oKey = new WMRMOBJSLib.WMRMKeysClass();
private WMRMOBJSLib.WMRMHeader oHeader = new WMRMOBJSLib.WMRMHeaderClass();
private WMRMOBJSLib.WMRMProtect oProtect = new WMRMOBJSLib.WMRMProtectClass();

//Customes variant
private string m_sKey;
private string m_sSeed;
private string m_sKeyID;

private string m_sHeader;


m_sKeyID = oKey.GenerateKeyID();
m_sSeed = oKey.GenerateSeed();

oKey.KeyID = m_sKeyID;
oKey.Seed = m_sSeed;

m_sKey = oKey.GenerateKey();

oHeader.KeyID = m_sKeyID;

if(this.txtURL.Text.Trim() =="")
oHeader.LicenseAcqURL = LACURL;
else
oHeader.LicenseAcqURL = this.txtURL.Text.Trim();

string sDate;
DateTime myDate;

switch(oHeader.get_Attribute("RID"))
{
case "0":
oHeader.set_Attribute("RIDExt","");
break;
case "1":
string sCount= this.txtCount.Text.Trim();
if(sCount=="") sCount="10";
oHeader.set_Attribute("RIDExt",sCount);
break;
case "2":
sDate= this.txtDate.Text.Trim();

try
{
myDate = System.DateTime.Parse(sDate);
}
catch(FormatException Fex)
{
MessageBox.Show(Fex.Message );
return ;
}
oHeader.set_Attribute("RIDExt",sDate);
break;

}

if(this.txtBatch.Text.Trim()!="") oHeader.ContentID=this.txtBatch.Text.Trim();
oHeader.IndividualizedVersion ="2.2";
oHeader.SetCheckSum(m_sKey);
oHeader.Sign(PRIVKEY);

m_sHeader = oHeader.Header ;

oProtect.Key = m_sKey;
oProtect.Header = m_sHeader;
dvd8x 2002-09-05
  • 打赏
  • 举报
回复
是, 报错, 可是问题还是没解决了。 不知道coollzh(梁子) 可不可以把你通过的code 看我看一下?
wanghu 2002-09-05
  • 打赏
  • 举报
回复
wmrm不能打包.dat和.mpg么?偶用.wmv试了试是可以的
另外package.asp中还有个错误: decription应该改为description
上文说'不报错'大概就是这个原因
dvd8x 2002-09-05
  • 打赏
  • 举报
回复
是呀,我加了v1keyid,我还加了ProtectObj.V1LicenseAcqURL。发现错误号是没有!可是最后一行ProtectObj.ProtectFile("d:\\b.wma");还是错
System.Runtime.InteropServices.COMException: 未指定的错误 !!!更可怕。 另我用的wma or wmv文件是邮winxp自带的那几个文件。后来我还用MP3自己压了一个,用的是最新的encoder.刚从MS下的。我想没什么问题。

至于我的server,我也是已经加入证书的。
“The latest revocation list and key information have been stored on this computer so that licenses you issue are delivered to legitimate client applications. If this computer is not running the Windows Media License Service, repeat this process on the computer that is running the License Service by opening the Web browser to this page. ”
这我想也不是问题。另,我用的是7,不是7。1 实在搞不到7.1 :(
可有朋友能帮助我?我用samples里的package.asp 是什么也没有生成,不报错。很怪呀。。。。。。
不知道有人可以给我一个能用的 程序我试一下。我猜是不是SDK有问题。我用的XP。我曾把程序放在一台2000上也一样。我花了2天时看文档,2天时间改这东西,可是还是不成!!!! 快哭 了。。。。。。。
最后, 多感激发发言的朋友。thanks!!!
wanghu 2002-09-05
  • 打赏
  • 举报
回复
我也遇到类似的问题。
用sdk例子中的package.asp打包文件(.dat或者.mpg),出现错误:
错误号0xC0042918 错误描述(err.description)则为空
出错行是: protectObj.InputFile = inputfile
hogwarts提到的两个问题(设置v1keyid和调用setchecksum)都不存在

望专家指点
coollzh 2002-09-05
  • 打赏
  • 举报
回复


我也写过drm的程序,我好像没有手工设定V1KeyID也可通过运行的;
另外注意你输入的文件路径对不对,还有你要加密的媒体文件看看有没有已经被加密过,或者格式不对(如没有用V8encode)

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧