Rinrin 的个人资料永远的羁绊照片日志列表更多 工具 帮助

日志


2月5日

Dirac 基于小波变换的编码

本人当一回白鼠。
 
1. rawvideo转换
mencoder stream.xxx -of rawvideo -o test.yuv -ovc raw -vf format=i420
 
2. rawvideo播放
mplayer -demuxer rawvideo -rawvideo w=640:h=480:format=i420 test.yuv
 
3. dirac编码
EncodeDirac.exe -cformat YUV420P -fr 30 -width 640 -height 480 -mv_prec 1/8 -qf 7 test.yuv test.drc
 
用它的Decoder播放起来忒耗CPU,明天测试其他参数。
10月19日

已知驱动服务名,修改网络连接名称

set DRV_NAME=tap0901
set NET_NAME=tap
for /f "tokens=3" %%i in ('reg query HKLM\System\CurrentControlSet\Services\%DRV_NAME%\Enum /v 0 ^| findstr REG_SZ') do set NET_ENUM=%%i
for /f "tokens=3" %%i in ('reg query HKLM\System\CurrentControlSet\Enum\%NET_ENUM% /v Driver ^| findstr REG_SZ') do set DRV_CLSID=%%i
for /f "tokens=3" %%i in ('reg query HKLM\System\CurrentControlSet\Control\Class\%DRV_CLSID% /v NetCfgInstanceId ^| findstr REG_SZ') do set CFG_CLSID=%%i
reg add HKLM\System\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\%CFG_CLSID%\Connection /v Name /d %NET_NAME% /f
5月19日

如何制作Simsun.pcf

如何制作Simsun.pcf
作者:Rinrin

    Requirements:
    Simsun.ttc
    Fontforge
    sed/Ultraedit
    X Utils[bdftopcf]

    Simsun.ttc是个Fontpack,其中有宋体和新宋体两种字体。
    Fontforge可以直接打开Simsun.ttc。当然,若你看着不爽,可以用Font Creator拆成两个ttf再处理。
    打开时会提示你这个字体含有内嵌点阵,并列出12/14/16三种,我只打算制作16x16的pcf,所以只选择了16。
    字体打开后,默认显示的是矢量字体,手动选择“查看”->"位图字体",可以看到TTF中内嵌的点阵。
    现在需要保存为bdf,选择 "文件"->"生成字体",设置格式为"无轮廓字体"和"BDF格式"即可生成。
    生成的bdf为2.2版本的格式,X Server只认2.1的,晕!
   
    研究了bdf格式,它是个文本文件。2.2增加了global SWIDTH/DWIDTH,而2.1不支持。这样就简单了。
    删掉STARTPROPERTIES之前的参量,类似这样:
    METRICSSET 2
    SWIDTH 1000 0
    DWIDTH 16 0
    SWIDTH1 1000 0
    DWIDTH1 16 0
    VVECTOR 8,13
    然后需要在每个字符描述块中加入:
    SWIDTH 1000 0
    DWIDTH 16 0
    两万多个字符,一个一个加不得累死!用sed/Ultraedit帮我们做吧:
    搜索:^ENCODING(.*)(\r\n)$
    替换为:ENCODING\1\2SWIDTH 1000 0\2DWIDTH 16 0\2
   
    OK了!本来这样就结束了,但bdf是文本,浪费很多空间。用bdftopcf转一下吧:
    bdftopcf Simsun.bdf > Simsun.pcf
    转换后的大小为1.9M左右,其实可以用bdftruncate删掉一部分字符再转换。

=End Of File=
Enjoy it.
=End Of File=

2月7日

Enable XP style UI in Windows Server 2003

第一步:破解msgina.dll
简单讲一下调用流程。Winlogon加载默认gina(即msgina.dll),创建服务进程和一些线程后然后进入MainLoop()。
MainLoop()中调用ShellStatusHostBegin(),接下来
ShellStatusHostBegin->Shell_LogonStatus_Init->CSystemSettings::IsFriendlyUIActive->CSystemSettings::IsWorkStationProduct
只需要修改CSystemSettings::IsWorkStationProduct()返回非负即可。
第二步:添加/修改注册表项
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
LogonType reg_dword:1
UIHost reg_sz:(改成你喜欢的ui)
 
enjoy it.
10月27日

Windows网络安装简介

作者:Rinrin
    顾名思义,Windows网络安装表示从局域网内部引导Windows安装,核心技术基于微软的RIS(Remote Installation Services)。RIS有一个缺点,即需要在域环境下才能配置运行RIS。不过这个限制已经被国外的高手破解了,现在可以从任何一台Windows(甚至是Linux)机器上配置网络安装所需要的服务。本文将简单说明实现Windows网络安装的技术要点。
    实现Windows网络安装需要四个服务:BOOTP,TFTP,BINL,Windows Share. 其中BOOTP和TFTP是实现PXE启动的基础,关于PXE启动的详细信息,可以参考本文后的引用2。
    BINL服务,微软称之为启动信息协商层(Boot Information Negotiation Layer),其作用是网卡查询、身份验证、启动镜像选择等功能。实现Windows网络安装只需要其中一项功能,即网卡查询。Sherpya逆向分析了BINL协议,并写了一个开源的Binl服务程序。要了解详细信息,可以参考本文后的引用1。
    Windows共享服务提供了安装文件的来源,并且在文本模式安装阶段作为启动分区(Boot Partition),因此也是必不可少的。
    Windows网络安装的大致步骤如下:
    1. 目标计算机从网卡PXE Boot ROM启动(当然,你也可以用PXELinux或PXEGrub来实现类似的启动功能)。
    2. 目标计算机从DHCP/BOOTP服务器获得网络地址,并获得TFTP服务器的IP地址和启动文件信息。
    3. 目标计算机向TFTP服务器获得启动文件startrom.com/startrom.n12
    4. startrom.com获取ntldr(由setupldr.exe改名而来),并将控制权传递给它。
    5. setupldr.exe获取ntdetect.com和winnt.sif,winnt.sif应该包含启动相关信息。
    从这个时候起,有两种启动方法,即ramdisk和网络启动,对于Ramdisk,启动分区为\Device\Ramdisk{xxxx...},你可以参考本文后的引用2。对于网络启动,你需要在winnt.sif中设定SetupSourceDevice参数。
    6. setupldr.exe通过ntdetect.com获得网卡的Vendor ID和Device ID, 并将它发送到Binl服务端口(4011)。
    7. Binl服务查找“数据库”,获得需要加载的驱动名称和服务名,返回给setupldr.exe
    8. Setupldr.exe按照正常顺序加载驱动,不过在最后,它会试着去加载前面给出网卡驱动和网络设备相关驱动,你可以从TFTP服务器的log里看到这些。有意思的是,txtsetup.sif并没有网络设备相关驱动的信息,我想可能是直接写在setupldr.exe里了。
    9. 控制权移交给kernel,kernel会试着去mount启动分区,要注意的是,你建好的共享必须提供匿名访问,否则会停住不动。
    10. 开始文本模式安装,setupdd复制文件到硬盘。完成后重新启动。
    11. 开始GUI阶段安装,要注意的是,之前应该在Winnt.sif中指定OriSrc和OriTyp,至于是不是必须的,我不好说,因为并没有试验过。
    12. 安装结束。实际上,你可以在winnt.sif中加入相关信息,以便实现无人值守安装。
    接下来,看一个实际的例子:
    1. 准备好DHCP/TFTP服务器,可以用tftpd32,也可以用性能较好的haneWin,看你的选择了。
    2. 设定好DHCP/TFTP服务器,指定TFTP根目录和启动文件名(startrom.n12或其他)。
    3. TFTP目录结构如下:
        TFTP
        │  ntdetect.com
        │  ntldr
        │  startrom.n12
        │  winnt.sif
        │
        └─boot
            └─I386
        其中ntldr由setupldr.exe改名而来,I386目录可以直接从安装光盘中复制。
    4. winnt.sif内容如下:
        [Data]
        floppyless = "1"
        msdosinitiated = "1"
        OriSrc = "\\Angel\TFTP\boot\i386"
        OriTyp = "4"
        LocalSourceOnCD = 1
        DisableAdminAccountOnDomainJoin = 1
       
        [SetupData]
        OsLoadOptions = "/fastdetect"
        SetupSourceDevice = "\Device\LanmanRedirector\Angel\TFTP\boot"
       
        [UserData]
        ComputerName = *
    Angel为当前计算机主机名,TFTP为共享名。
    5. 编译Binl服务程序binlsrv.c,可以在本文后的引用1找到。如果你装了VC,可以用cl binlsrv.c ws2_32.lib来编译。
    6. 编写文件nics.txt,和binlsrv.exe放在同一目录下:
        1022 2000 vmxnet.sys vmxnet
        1186 1300 RTL8139.sys rtl8139
    从左到右分别为PCI Vendor ID, Device ID, 驱动名, 服务名
    7. 把网卡驱动(如vmxnet.sys,RTL8139.sys)放到TFTP\boot\I386目录下
    8. 将TFTP目录共享,注意匿名访问。如何设置就不说了,网络上有很多文章,重点是启用Guest、允许网络访问、允许空会话、NTFS权限等等,完了别忘了重启一下Server服务。
    9. 启动目标计算机,开始网络安装!
    后记:
    Windows网络安装并不复杂,国外的高手几年前就开始研究了。希望大家能多到Boot land, 911CD这样的论坛逛一逛,开阔眼界吧。
    引用:
    1. Sherpya. RIS for Linux, http://oss.netfarm.it/guides/
    2. Climbing. PXE服务器架设指南及PXE启动WinPE(含PE2.0)解决方案总结, http://www.znpc.net/bbs/viewthread.php?tid=3662&extra=page%3D1
2月24日

在Visual Studio 2005和VC++版本8开发环境中使用yasm

大意实际上是这样:
    把yasm.exe放到Program Files\Microsoft Visual Studio 8\VC\bin下,把yasm.rules放到Program Files\Microsoft Visual Studio 8\VC\VCProjectDefaults下,然后自定义生成规则即可,这一点玩过VS 2005的都应该知道。。。
    文章最后提到了链接器的bug:当链接器产生dll文件时,无法识别指示绝对地址的符号。
    本文后附带了一个中文的yasm.rules :)
begin-base64 644 yasm.zip
UEsDBBQAAgAIAMRzWDYWU/b9sQMAAAgNAAAKAAAAeWFzbS5ydWxlc71XW08T
QRR+ron/YbMxREyg+EZkV6MUExIvjSDRIA/T7bSM2UvdnQH65qVa8BKbqCia
eA/1SjUmgoL6Z7rb8sRfcGZnd9niLlalPu2Zc86cM993Zs/MbKz+kA7NaKow
BU0LGbos7u/tEwWoK0YW6XlZJDjX0y8eOrh7lzSGLALUEUyyyBg1DPUoUuHu
XYkTQIOyeBZYmkhHY36c/t6+PqagMxPSKaJCi0kJaZBY2NCOEKRmmZbp/BCH
R46L7jiFrIIKipuRnY/lxtq8vfCK2wcNTQN69hjSqb1I7ULPmSlF6MkJe/am
VYBzhqmxyd3CeNqEadNQJqgETAuaVEjBDMnT7zFkYYaBebrqHI1nUem0vikP
64pKsjAN8CQbnsych0p4FtILBFsTfF0nCWYjWRzfs8WR29lwaAZDnVFE3fb1
eqwlEkMzUCGYqlPQUkxUwC6JHDdFNczS+NG6+RSXz4RE4RWgiZFHMNWMYJPW
ztMXudLj2AMmesoWop3lVfv6U3vpYf3LnO/gB0mDPORe9spKs1ry7YMAw7xh
FmVx/XmJT228W7RvLwcZWuDcLFOfTc+HJe68sTZrL17uAgXDGrCKWsZQuezM
zoeVgixMAZVArttYC1Y5Mo2wMimLPSlh3PWY2EyvIg1hmJVFbBLoq4f1SWgi
DDIqbDEk26AwvCMieVxfKDEeb161K2+byzX7e+kv2Lx6q/FtaTsSQ0mc+XJ9
9TNlszVbwAoSui4QAw943PBBBxkK/p9IehrV1fWFl53cZjxDjGfACvkPe6W1
C0TT8WjJeVrmJbQrtxrVD39OSvP7Hbv8dZvdEp8koMPYfpPkAFHxGDPJIrex
poRTyOw+57UntzX1GpnzLXPboSnciSNJsmfvN5+96jBJ8UkCktRtSGoHKD2N
vPbB4EZ3D7ptQ391J1pHdIYAZLodkEfoBQACPeaQoQdsJLj612rj7pPmhyvN
2r36j2fOpdrO1vFBza4sxicJIOYFZap/K6QhnWhxVWN3iNhyvSw1KteCy8kO
1Wr94pxz43V95WJ95U04yV5++un05sAlgZ6SAhdNMM2Fbj+khy0hub+uf0Pw
wLo6X5Pwfu4+MdAEdJl6cE/5hQBmEgJbso0M+6My0KXHJAhbgvBSsgWQlAwX
7/cFda+CkfVsVl84jyudLGaQgfVPqDZr751P9w5EVvXwaBfQCgOjLT55YHWk
yIXfFPmfa1ygK4+JH7b8SY2l5Jbbr5Tc8r5wnx9J//1BQ0Y8YqjhJ1BLAQIU
ABQAAgAIAMRzWDYWU/b9sQMAAAgNAAAKAAAAAAAAAAAAIAAAAAAAAAB5YXNt
LnJ1bGVzUEsFBgAAAAABAAEAOAAAANkDAAAAAA==
====
10月2日

BOOT.INI可选参数

----====|BOOT.INI可选参数|====----
作者:Rinrin
注意:如要引用此文档请注明作者
2006.10.15  增加了/RDCLIENTPORT
2005.8.15    初始版本
----====|[1]简介|====----
Boot.ini是用于NTLDR的配置文件,系统启动时,NTLDR读取Boot.ini,并进行解释.通常Boot.ini的内容
如下:
+-----------------------------------------------------------------------------+
| [boot loader]                                                               |
| timeout=30                                                                  |
| default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS                         |
| [operating systems]                                                         |
| multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows" /fastdetect |
+-----------------------------------------------------------------------------+
位于引号之后的就是可选参数.NTLDR对可选参数有两种处理情况:
1.链式装载进行多重启动时,可选参数直接被丢弃
2.引导NT系列操作系统时,可选参数被复制出来,启动信息块结构中的某个指针将指向可选参数字符串
  这个指针将会传给执行体,然后传给会话管理器.最后记录在如下注册表项中:
  +-------------------------------------------------------------------- ---+
  | HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control SystemStartOptions |
  +------------------------------------------------------------------------+
由此可见:可选参数实际上可以是任意的,只不过系统可以识别的参数是有限的.
----====|[2]主体|====----
下面就是目前发现的可接受的可选参数,如果有新的参数这里没有列出的话,欢迎给我来信
(Rinrin _at_ tju.edu.cn).
/3GB
将用户地址空间从2GB增加到3GB.提高大型数据库及应用程序性能.只适用于NT4 企业版,2000高级服务器版,
2000数据中心服务器版,XP以上版本Windows.
/BASEVIDEO
只加载标准显示器驱动(vga.sys)
/BAUDRATE=
指定调试模式时的波特率,默认为19200.(例如/BAUDRATE=115200)
/BOOTLOG
日志模式.Windows将生成启动日志%SystemRoot%/Ntbtlog.txt
/BOOTLOGO
显示背景图片,必须是640x480x4的bmp文件,文件名为Boot.bmp并放置于Windows目录下.这个参数必须与
/NOGUIBOOT联合使用,操作系统必须为XP以上.
/BREAK
HAL初始化时停止在断点处.如果不和/DEBUG一起使用,则会发生蓝屏(0x00000078 PHASE0_ EXCEPTION)
/BURNMEMORY=
指定不可使用的内存大小,单位为MB.与/MAXMEM=类似.
/CHANNEL=
当指定/DEBUGPORT=1394时,此参数选定调试用的通道.取值范围为0-62,默认为0.
/CLKLVL
指定此参数后,x86多处理器HAL(Halmps.dll)将会把系统时钟设置为电平触发方式而不是边缘触发.

/CMDCONS
当启动恢复控制台时应传递此参数,并且只能有这一个参数.
/CRASHDEBUG
进入调试模式,但当出现蓝屏时才激活.
/DEBUG
进入调试模式.
/DEBUGPORT=
指定调试端口.例如/DEBUGPORT=COM2,/DEBUGPORT=1394.
/DEBUGSTOP
启动文本安装模式的调试.只用于setupldr.bin(使用调试版以达到最好的效果).该调试模式被称为
Boot Debug,早于Kernel Debug.可以在WINNT.SIF或TXTSETUP.SIF中指定此参数.
/DETECTHAL
用于Windows Vista中,将自动检测HAL的类型.
/EXECUTE
禁止数据执行保护功能.适用版本XP SP2,2003SP1.
/FASTDETECT
NTDETECT不检测串行口和并行口上的设备.加快启动速度.适用版本2000以上.NT4则使用/NOSERIALMICE
参数.
/INTAFFINITY
使用此参数后x86多处理器HAL(Halmps.dll)将只允许编号最大的处理器收到中断请求.
/KERNEL=
/HAL=
指定内核镜像(NTOSKRNL.EXE)和HAL(HAL.DLL)的位置.NTLDR将加载你指定的Kernel和Hal而忽略默认的.
/LASTKNOWNGOOD
使用最后一次正确配置.
/MAXMEM=
可以使用的内存数,单位为MB.可以使用的内存是从头开始的,和 /BURNMEMORY= 不同,/MAXMEM=不考虑
内存空洞问题.
/MAXPROCSPERCLUSTER=
x86多处理器HAL(Halmps.dll)将强制APIC使用簇模式寻址.
/MININT
适用于Windows PE.使用此参数后,配置管理器(CM)将以只读模式装载注册表分支(Hive)SYSTEM,所有的
改变只保留于内存中.
/NODEBUG
不进入调试模式.可以覆盖/DEBUG,/DEBUGPORT,/BAUDRATE和/DEBUGSTOP等参数.
/NOEXECUTE=
指定数据执行保护(DEP)的类型.只适用于32位系统,64位系统的DEP总是打开.有以下几种类型:
    /NOEXECUTE=OPTIN     针对系统核心和指定的映像文件打开DEP功能.
    /NOEXECUTE=OPTOUT     针对指定的映像文件以外的打开DEP功能.
    /NOEXECUTE=ALWAYSON   总是打开DEP功能.
    /NOEXECUTE=ALWAYSOFF  关闭DEP,同/EXECUTE.
/NOGUIBOOT
不显示启动背景图片.
/NOLOWMEM
不使用开头的4G内存.此参数必须和/PAE一起使用,系统必须有4G以上的物理内存,支持PAE的内核
(Ntkrnlpa.exe)必须被启用.此参数主要用于测试设备驱动程序对大内存系统的兼容性.
/NOPAE
不装载支持PAE的内核映像.
/NOSERIALMICE=[COMx | COMx,y,z...]
用于NT4的过时参数.可以用/FASTDETECT代替.
/NUMPROC=
在多处理器系统中指定可用的处理器个数.
/ONECPU
在多处理器系统中只使用一个CPU.
/PAE
启用PAE.NTLDR将会加载Ntkrnlpa.exe.
/PCILOCK
系统将不自动为PCI设备分配IO和IRQ资源.所有的资源由BIOS分配.
/RDCLIENTPORT=
用于自动部署服务(ADS),客户机将使用指定端口来连接到服务器。
 
/RDEXPORTASCD
当使用ISO文件作为RAMDISK镜像时,必须指定此参数.否则会发生Unmountable_Boot_Volume错误.
/RDPATH=
指定SDI映像文件位置.可以使用ARC路径,如果使用PXE技术启动系统的话,SDI文件可以在TFTP服务器上.
对于Windows Server 2003 SP1,还可以使用光盘镜像(ISO文件),不过必须和/RDEXPORTASCD一起使用.
/RDIMAGEOFFSET=
SDI文件中磁盘镜像的起始偏移.通常为4096.使用SDI文件启动必须指定此参数.
/REDIRECT
将紧急管理服务(EMS)的输入输出重定向至串行口.可以在[boot loader]小节中指定redirect=和
redirectbaudrate=参数.
/SAFEBOOT:
以安全模式启动系统.系统将只装载HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot下指定的
驱动和服务.有以下三种类型:
    /SAFEBOOT:MINIMAL   普通的安全模式
    /SAFEBOOT:NETWORK   带网络连接的安全模式
    /SAFEBOOT:DSREPAIR  目录恢复模式
一个可选的附加参数为(ALTERNATESHELL),例如/SAFEBOOT:MINIMAL(ALTERNATESHELL)
使用此附加参数后,启动的Shell在如下注册表项中定义:
    HKLM\SYSTEM\CurrentControlSet\SafeBoot\AlternateShell
/SCSIORDINAL:
指定scsi控制器的ID.防止因加入新的SCSI设备导致系统不能正常启动.
/SDIBOOT=
适用于Windows XP Embedded中,用来指定加载的SDI文件位置.和/RDPATH=类似.
/SOS
在启动时显示装载的驱动程序,系统版本号,物理内存大小和处理器个数.
/TIMERES=
x86多处理器HAL(Halmps.dll)将设定系统时钟为指定的间隔数,单位为100ns.HAL支持以下几种:
    9766
    19532
    39063
    78125
默认为7.8ms(最后一个)
/USENEWLOADER
用于Windows Vista中.Windows将使用新的启动方式即把控制权交给Winload.exe
/USERVA=
类似于/3GB,指定用户地址空间大小,范围为2048-3072,单位为MB.
/WIN95
链式装载Bootsect.w40并模拟Windows 9x的多重启动操作(如文件改名).
/WIN95DOS
链式装载Bootsect.dos并模拟多重启动操作,类似于/WIN95.
/YEAR=
使用指定的年份而不使用BIOS实时钟中的.曾被用来测试千年虫问题.
 
----====|[3]参考|====----
[1]Boot INI Options Reference
    http://www.sysinternals.com/Information/bootini.html
----====|End Of File|====----