编程语言
文章平均质量分 58
心想才事成
这个作者很懒,什么都没留下…
展开
-
解读 CreateMutexWin32A
解读 CreateMutexWin32A//----- (10029390) --------------------------------------------------------void *__stdcall CreateMutexWin32A(const unsigned __int16 *a1, int a2){ struct _SECURIT原创 2017-03-16 21:43:06 · 1137 阅读 · 0 评论 -
加载 WCP
加载 WCP 功能:加载WCP.DLL,初始化几个函数: //----- (1008CBD0)--------------------------------------------------------signed int __userpurge WcpLoad@eax>(const unsigned__int16 *a1@ecx>,con原创 2017-03-01 21:56:12 · 780 阅读 · 0 评论 -
13.4.3 收集有关地区的统计信息
13.4.3 收集有关地区的统计信息我们的目标是展示自 1990 年以来,不同地区森林面积的变化。我们需要遍历所有已有的地区,检查数据是否可用,找到下载的指标值。这可以通过使用我们创建的映射,非常轻松地完成,因为已经用年份和地区 ID 作为关键字。 需要小心的是有一些数据可能会缺失,因此,我们要过滤掉所有没有我们需要年份数据的地区。另外,我们还想要显示森林总面积,而不是百分比,因此,在返回数据之前翻译 2017-01-18 18:58:06 · 516 阅读 · 0 评论 -
13.4.2 用计量单位格式化数据
13.4.2 用计量单位格式化数据XML 数据中的许多指标,都只能转换为浮点数(float);这当然是对的,因为面积和森林覆盖率都是数字,但是,这种数据没有更多的意义。把从非类型化的 XML 数据转换成 F# 类型化数据结构,其目的是通过类型注解,更好地了解这些值含义。为了使类型更具体,我们可以使用计量单位(units of measure),这在第二章提到过。使用这个功能,面积按平方公里计,森林覆翻译 2017-01-17 20:19:02 · 414 阅读 · 0 评论 -
13.4.1 读取值
13.4.1 读取值我们首先要做的是从 XML 中读取感兴趣的数据。定义一个函数,参数为 XDocument 对象的列表(对应于数据集的每个页面),返回序列类型,每个元素包含了指标、 地区名,以及观测的年份。 清单 13.14 展示了 readValues 函数,以及辅助函数,从表示一条记录的 XML 节点中读数据,两个函数有一个名为 parse 的参数,是真正解析字符串值的函数,我们很快就会知道翻译 2017-01-17 20:15:59 · 399 阅读 · 0 评论 -
13.4 从数据中收集信息
13.4 从数据中收集信息从互联网下载大量的数据很容易,但从中收集到有用的信息就困难了。本章到目前为止,我们已经下载了地区列表,并把它转换为地区名字的序列;然后,下载一组包含所有地区和国家信息的 XML 文档。在本节,我们将把这些非类型化的 XML 数据转换为类型化的数据结构,这样,信息可以方便地显示给用户。翻译 2017-01-17 20:14:18 · 244 阅读 · 0 评论 -
13.3.2 提取地区代码
13.3.2 提取地区代码我们下载函数的输出结果是字符串,因此,需要将字符串解析为 XML 文档。由于这个操作经常要用,所以,我们要写一个简单的包装函数,用 worldBankDownload 下载数据,把返回结果转换成 XDocument 对象。下载操作异步运行,因此,我们使用异步工作流实现这个函数:let worldBankRequest(props) = async { let! text翻译 2017-01-16 20:17:08 · 375 阅读 · 0 评论 -
13.3.1 实现 XML 辅助函数
13.3.1 实现 XML 辅助函数LINQ to XML 主要是为 C# 和 VB 而设计的,在 F# 中使用可能有些麻烦。例如,F# 不支持隐式类型转换(因为这会使类型推断变得复杂),所以,每次描述元素名时,都必须使用 XName.Get,而不能只用字符串。为了简化工作,需要写辅助函数或自定义运算符1。 用几个 F# 函数,把 LINQ to XML 最常用的部分包装起来,实现非常类似 F#翻译 2017-01-16 20:14:32 · 366 阅读 · 0 评论 -
13.1.3 理解工作流的原理
13.1.3 理解工作流的原理从前一章我们知道,用计算表达式写的 F# 代码,会由对应的计算生成器,转换成使用基本操作的表达式。对于异步工作流来说,let! 结构转换成对 async.Bind 的调用,return 转换成 async.Return;此外,异步工作流自动延迟,因此,计算本身需要包装成另外的基本操作,以确保整个代码包含在一个函数中,这个函数能够在后面工作流启动时执行。清单 13.3 是翻译 2017-01-12 20:44:37 · 552 阅读 · 0 评论 -
13.1.4 创建工作流基本操作
bvio13.1.3 理解工作流的原理从前一章我们知道,用计算表达式写的 F# 代码,会由对应的计算生成器,转换成使用基本操作的表达式。对于异步工作流来说,let! 结构转换成对 async.Bind 的调用,return 转换成 async.Return;此外,异步工作流自动延迟,因此,计算本身需要包装成另外的基本操作,以确保整个代码包含在一个函数中,这个函数能够在后面工作流启动时执行。清单 13翻译 2017-01-12 20:45:47 · 367 阅读 · 0 评论 -
13.3.3 获取指标
13.3.3 获取指标获取有关国家或地区的数据,需要使用世界银行服务的不同函数,函数的路径是 /countries/indicators,可以在 Data Calls 选项卡的 Query Generator(查询生成器)中找到,它能够请求指定国家在特定时间段的有关指标数据。我们不必单独下载每个感兴趣的地区数据,可以一次性地获得所有国家的信息,在内存中进行处理。以这种方式可以下载更多的数据,而请求的翻译 2017-01-16 20:18:58 · 273 阅读 · 0 评论 -
13.1.2 异步下载网页
13.1.2 异步下载网页 使用异步工作流抓取网页内容,需要引用 FSharp.PowerPack.dll库,它提供了许多 .NET方法的异步版本。开发独立的应用程序时,可以使用添加引用命令;在这一章,我们将使用交互式开发模式,因此,创建新的 F#脚本文件,使用 #r指令(清单 13.1)。 清单13.1使用异步工作流写代码(交互式F#) > #r "翻译 2017-01-11 20:49:00 · 308 阅读 · 0 评论 -
第四部分 函数式编程应用
第四部分 函数式编程应用虽然函数式编程很优雅,但是,更重要的还是实用:它不仅能解决常规总是,解决专门问题,一样出色。比如,我们已经看到的例子,第四章绘制饼图的应用程序,和第十一章简单的照片浏览器,这些示例的主要目的,是为了演示特定的概念和技术。 第四部分则不同。每一章我们都会花大量篇幅讨论实际问题,用最适当的 F# 功能,以函数式编程来解决。这些代码用到的功能都是我们已经学过的,但是,限制在一章中翻译 2017-01-11 20:40:45 · 327 阅读 · 0 评论 -
13.2.1 访问世界银行的数据
13.2.1 访问世界银行的数据在本章使用的数据源,是由世界银行提供的服务。世界银行是为发展中国家提供资金和知识的国际组织识别哪种类型的支援最有效,确定需求在哪里,评估对发展中国家的经济,生活质量,环境是否产生了影响,是其工作的一部分。世界银行有一组数据,称为世界发展指标(World Development Indicators),包含了许多国家的信息,而且数据可在线使用。在本章,我们将使用有关环境翻译 2017-01-13 22:19:09 · 631 阅读 · 0 评论 -
13.2 连接到世界银行
13.2 连接到世界银行我们把异步工作流的内容放在有关探索式编程(explorative programming)这一章来讨论,绝不是偶然的,我们每天要处理的很多重要数据源,都是以网站服务,或者其他基于网站应用程序的形式,在线提供。我们已经知道,对于获取数据,异步工作流是 F# 的基本功能。 高效下载数据并不是唯一的问题。数据源返回的数据,通常是非类型化的格式(比如,纯文本,或者没有正式定义架构的翻译 2017-01-13 22:17:21 · 220 阅读 · 0 评论 -
解读LZMSDecompressFile
解读LZMSDecompressFile HRESULTLZMSDecompressFile(LPWSTRCompressFileName){ HRESULTresult = 0; IRtlFile *pIFile = NULL; GetInterfaceAndObject(CompressFileName, &pIFile, NULL原创 2016-12-30 21:20:02 · 1496 阅读 · 0 评论 -
CCSIExternalTransformerExecutor和 CCSIExternalTransformerExecutor::Impl
CCSIExternalTransformerExecutor和 CCSIExternalTransformerExecutor::Impl CCSIExternalTransformerExecutor 有 8 个字段;CCSIExternalTransformerExecutor::Impl 有 50 个字段。 两者是否有关系,是父子类吗?(571d3d原创 2016-12-18 21:26:03 · 393 阅读 · 0 评论 -
CComObjectBase 和IUnknown 接口
CComObjectBase 和IUnknown接口 `vftable'{for`Windows::COM::CComObjectBase'}比 `vftable'{for`IUnknown'}多一个函数:`vector deleting destructor'(unsignedint),且排在最前面。那么,是否可以推定:Windows::COM::CComObjec原创 2016-12-17 21:56:54 · 546 阅读 · 0 评论 -
解读 RtlTrimNtPathSegment
解读 RtlTrimNtPathSegment 返回字符串前后的 \ 数 typedefHRESULT(__fastcall *PRTL_TRIM_NTPATH_SEGMENT)( PLUNICODE_STRING, UINT_PTR *, UINT_PTR * );staticPRTL_TRIM_NTPATH_SEGMENTR原创 2017-02-25 21:42:53 · 675 阅读 · 0 评论 -
解读 GenerateHashList
解读 GenerateHashList 把几个初始条件串用固定的符号连接起来:a4 a1 !a3 , a2 # a5 \n typedefHRESULT(__fastcall *PGENERATE_HASH_LIST)( _LUNICODE_STRINGconst &, _LUNICODE_STRINGconst &, _LUNICO原创 2017-02-25 21:43:39 · 599 阅读 · 0 评论 -
解析CbsCore 模式
解析CbsCore模式 1CbsCoreModeOfflineHANDLE hFile =(HANDLE)1;if ( hFile ) SetCbsCoreMode((char *)1);2CbsCoreModePSRLv35 = W原创 2017-03-15 22:03:16 · 725 阅读 · 0 评论 -
解读 DetermineServicingStackVersion
解读 DetermineServicingStackVersion 这里也没有涉及到 hFile的值修改。 //----- (10086424)--------------------------------------------------------int __fastcall DetermineServicingStackVersion(LPCWSTR lpw原创 2017-03-15 22:01:02 · 1412 阅读 · 0 评论 -
CbsCoreSetState
解析 hFile //----- (10087AE0)--------------------------------------------------------signed int __stdcall CbsCoreSetState(int a1,int a2){ v2 =0; switch (a1 ) { case 8:原创 2017-03-15 21:59:58 · 464 阅读 · 0 评论 -
解读 DeltaDecompressFileFile
解读DeltaDecompressFileFile 使用DeltaDecompressFileFile函数可以解压缩DCD格式的压缩文件。 HRESULTDeltaDecompressFileFile(LPWSTRDeltaFileName,LPWSTRBaseFileName){ HRESULTresult = 0;原创 2017-03-12 18:09:05 · 583 阅读 · 0 评论 -
解读 CopyFileContents
解读CopyFileContents //----- (100F1216)--------------------------------------------------------int __fastcall CopyFileContents(inta1,int a2, int a3, int a4){ v38 =C00000E5; v4原创 2017-03-14 21:35:39 · 677 阅读 · 0 评论 -
解读 SysNativeCompressFile
解读 SysNativeCompressFile //----- (100EE3EA)--------------------------------------------------------int __thiscallWindows::Rtl::SystemImplementation::DirectFileSystemProvider::SysNativeCompres原创 2017-03-13 21:46:50 · 738 阅读 · 0 评论 -
解读 DelayExecution
解读 DelayExecution//----- (100E6897) --------------------------------------------------------__int32 __stdcall Windows::Rtl::SystemImplementation::DelayExecution(Windows::Rtl::SystemImplement原创 2017-03-13 20:24:23 · 3590 阅读 · 0 评论 -
解读RtlCreateServiceSid
解读RtlCreateServiceSid //----- (0000000180003E40)----------------------------------------------------__int64 __fastcall IsKeyProtected(HKEYhKey,__int64 a2, __int16 a3, _DWORD *a4){原创 2017-03-22 21:48:30 · 1115 阅读 · 0 评论 -
Sysprep
Sysprep //----- (10002AB0)--------------------------------------------------------int __stdcall SqmSysprepCleanup(){ CleanupAllWinSqmFiles(); return 0;}//----- (10002AC0)-------原创 2017-03-21 21:52:48 · 1305 阅读 · 0 评论 -
设置权限
设置权限 v9 = operator new(0x1Cu); v10 =(struct _TOKEN_PRIVILEGES*)v9; if (!v9) { v15 =-2147024882; "Failedto allocate memory for privilege tokens."); goto LABEL_342;原创 2017-03-21 21:38:28 · 1105 阅读 · 0 评论 -
微软技术大会
微软技术大会2017 NexTech https://channel9.msdn.com/Events/NexTech-Africa/20172016 ignite https://www.microsoft.com/china/ignite/2016/ https://channel9.msdn.com/Events/Ignite/New-Zealand-2016 Build htt原创 2017-01-28 23:49:11 · 530 阅读 · 0 评论 -
解读CreateClassFactory
解读CreateClassFactory 本篇主要包括下面几个函数:CreateClassFactoryCCbsClassFactory::CreateInstanceCCbsClassFactory::LockServerCCbsIUnknownImplIClassFactory,IUnknown,IUnknown,IUnknown,IUnknown>::QueryInt原创 2017-03-11 20:43:44 · 646 阅读 · 0 评论 -
解读 TiWorkerCoreInitialize
解读 TiWorkerCoreInitialize 调用 CbsCoreInitialize,传递进去的函数地址就是在这里确定的。 //----- (0041BDC2)--------------------------------------------------------int __thiscall TiWorkerCoreInitialize(void*this原创 2017-03-10 22:22:19 · 865 阅读 · 0 评论 -
新版本的CbsCoreInitialize 函数可读性更强
新版本的CbsCoreInitialize 函数可读性更强 这是10.0.14393.0版本。//----- (10087380)--------------------------------------------------------int __stdcall CbsCoreInitialize(structIMalloc *a1,原创 2017-03-10 21:43:02 · 780 阅读 · 0 评论 -
解读 FindServicingStackDirectoryVersion
解读 FindServicingStackDirectoryVersion 功能:找到当前版本的Servicing Stack的目录的版本号,用输入的目录与保存在注册表中的值进行对照。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ComponentBased Servicing\Version比原创 2017-03-06 21:51:07 · 1178 阅读 · 0 评论 -
解析 SCZ 字符串
解析 SCZ字符串 直接就定义成:typedef WCHAR *PSCZ;就是说,PSCZ就是保存了WCHAR *的首地址。真正的 SCZ字符串有两部分组成:第一部分是字符串的长度,第二部分是字符串本身,字符串以空结尾。 //----- (1008EBD7)---------------------------------------------原创 2017-03-08 22:05:48 · 619 阅读 · 0 评论 -
CBSCore 中的字符串 SCZ
CBSCore 中的字符串 SCZ CBSCore 中的字符串 SCZ类似于 WCHAR*,但是,有一点不同,就是在WCHAR*前 -1位,保存了字符串的长度。引用的地址还是 WCHAR*的起始位置。不知道是怎么实现的。由于不知道如何表示 -1位的长度,因此也就没有办法实现 SCZ结构。好在可以用系统提供的函数进行初始化,但是,只能用P原创 2017-03-08 22:04:24 · 479 阅读 · 0 评论 -
OpenStore是值得看一下的
OpenStore是值得看一下的 在 CreateNewOfflineStore 和 OpenExistingOfflineStore 中调用。调用 `anonymous namespace'::CNtStoreCreationParameters::CNtStoreCreationParameters((int)&v20); v9 =((int(__stdcall*)原创 2016-12-17 21:54:19 · 1319 阅读 · 0 评论 -
解读RtlGetIdentityAuthority
解读RtlGetIdentityAuthority RtlGetIdentityAuthority,这个函数使用的十分广泛,返回一组虚函数地址。需要一个输入参数,但是,不起什么作用,直接传一个 0 即可。输出参数为 IRtlIdentityAuthority接口。调用这个函数,好像会影响两个全局变量:g_pIIdentityAuthorityg_pIAppIdAutho原创 2016-12-21 20:26:20 · 477 阅读 · 0 评论 -
解析 GetRerootedSIL
解析 GetRerootedSIL GetRerootedSIL(class`anonymous namespace'::CNtStoreCreationParameters const &,classWindows::Auto *) //----- (1011F3CE)----------------------------------------原创 2016-12-14 11:02:50 · 656 阅读 · 0 评论