当前位置: 首页 > news >正文

付网站建设费用会计分录响应式网页开发

付网站建设费用会计分录,响应式网页开发,企业免费网站模板,rp如何做网站在Windows编程中#xff0c;经常会遇到需要对数据进行压缩和解压缩的情况#xff0c;数据压缩是一种常见的优化手段#xff0c;能够减小数据的存储空间并提高传输效率。Windows提供了这些API函数#xff0c;本文将深入探讨使用Windows API进行数据压缩与解压缩的过程#…在Windows编程中经常会遇到需要对数据进行压缩和解压缩的情况数据压缩是一种常见的优化手段能够减小数据的存储空间并提高传输效率。Windows提供了这些API函数本文将深入探讨使用Windows API进行数据压缩与解压缩的过程主要使用ntdll.dll库中的相关函数。 RtlGetCompressionWorkSpaceSize RtlGetCompressionWorkSpaceSize 函数位于ntdll.dll库中。该函数用于获取数据压缩所需的工作空间大小。CompressionFormatAndEngine参数指定压缩格式和引擎CompressBufferWorkSpaceSize和CompressFragmentWorkSpaceSize分别用于输出缓冲区和片段的工作空间大小。 以下是该函数的声明 typedef NTSTATUS(WINAPI *typedef_RtlGetCompressionWorkSpaceSize)(_In_ USHORT CompressionFormatAndEngine,_Out_ PULONG CompressBufferWorkSpaceSize,_Out_ PULONG CompressFragmentWorkSpaceSize );该函数有以下参数 CompressionFormatAndEngine指定压缩格式和引擎的参数。CompressBufferWorkSpaceSize用于输出压缩缓冲区工作空间大小的指针。CompressFragmentWorkSpaceSize用于输出压缩片段工作空间大小的指针。 函数返回NTSTATUS类型的状态码其中STATUS_SUCCESS表示成功执行。 在使用这个函数时你需要提供足够大的缓冲区来存储工作空间大小。可以按照以下步骤使用该函数 加载 ntdll.dll 库。获取 RtlGetCompressionWorkSpaceSize 函数地址。定义变量用于存储工作空间大小。调用 RtlGetCompressionWorkSpaceSize 函数获取工作空间大小。 RtlCompressBuffer RtlCompressBuffer 同样位于ntdll.dll库中。该函数用于将数据进行压缩。CompressionFormatAndEngine参数指定压缩格式和引擎UncompressedBuffer和UncompressedBufferSize表示输入的未压缩数据CompressedBuffer和CompressedBufferSize表示输出的压缩数据UncompressedChunkSize表示未压缩数据的块大小FinalCompressedSize表示最终压缩后的大小WorkSpace表示用于工作的缓冲区。 以下是该函数的声明 typedef NTSTATUS(WINAPI *typedef_RtlCompressBuffer)(_In_ USHORT CompressionFormatAndEngine,_In_ PUCHAR UncompressedBuffer,_In_ ULONG UncompressedBufferSize,_Out_ PUCHAR CompressedBuffer,_In_ ULONG CompressedBufferSize,_In_ ULONG UncompressedChunkSize,_Out_ PULONG FinalCompressedSize,_In_ PVOID WorkSpace );该函数的参数包括 CompressionFormatAndEngine指定压缩格式和引擎的参数。UncompressedBuffer指向待压缩数据的指针。UncompressedBufferSize待压缩数据的大小。CompressedBuffer指向存储压缩数据的缓冲区的指针。CompressedBufferSize存储压缩数据的缓冲区的大小。UncompressedChunkSize未压缩的数据块的大小。FinalCompressedSize用于输出最终压缩数据的大小的指针。WorkSpace用于提供工作空间的指针。 函数返回NTSTATUS类型的状态码其中STATUS_SUCCESS表示成功执行。 在使用这个函数时你需要提供足够大的缓冲区来存储压缩后的数据。可以按照以下步骤使用该函数 加载ntdll.dll库。获取RtlCompressBuffer函数地址。定义变量并分配内存用于存储未压缩的数据和压缩后的数据。定义变量用于存储工作空间。调用RtlCompressBuffer函数将数据进行压缩。处理压缩后的数据。 RtlDecompressBuffer RtlDecompressBuffer 同样位于ntdll.dll库中。该函数用于将压缩数据进行解压缩。CompressionFormat参数指定压缩格式UncompressedBuffer和UncompressedBufferSize表示输出的未压缩数据CompressedBuffer和CompressedBufferSize表示输入的压缩数据FinalUncompressedSize表示最终解压缩后的大小。 以下是该函数的声明 typedef NTSTATUS(WINAPI *typedef_RtlDecompressBuffer)(_In_ USHORT CompressionFormat,_Out_ PUCHAR UncompressedBuffer,_In_ ULONG UncompressedBufferSize,_In_ PUCHAR CompressedBuffer,_In_ ULONG CompressedBufferSize,_Out_ PULONG FinalUncompressedSize );该函数的参数包括 CompressionFormat指定解压缩的格式。UncompressedBuffer指向存储解压后数据的缓冲区的指针。UncompressedBufferSize存储解压后数据的缓冲区的大小。CompressedBuffer指向待解压数据的指针。CompressedBufferSize待解压数据的大小。FinalUncompressedSize用于输出最终解压后数据的大小的指针。 函数返回NTSTATUS类型的状态码其中STATUS_SUCCESS表示成功执行。 在使用这个函数时你需要提供足够大的缓冲区来存储解压后的数据。可以按照以下步骤使用该函数 加载ntdll.dll库。获取RtlDecompressBuffer函数地址。定义变量并分配内存用于存储待解压的数据和解压后的数据。调用RtlDecompressBuffer函数将数据进行解压。处理解压后的数据。 // 代码来源 《WINDOWS黑客编程技术详解》 // 作者甘迪文 #include Windows.h #include iostream #include windef.htypedef NTSTATUS(WINAPI *typedef_RtlGetCompressionWorkSpaceSize)(_In_ USHORT CompressionFormatAndEngine,_Out_ PULONG CompressBufferWorkSpaceSize,_Out_ PULONG CompressFragmentWorkSpaceSize);typedef NTSTATUS(WINAPI *typedef_RtlCompressBuffer)(_In_ USHORT CompressionFormatAndEngine,_In_ PUCHAR UncompressedBuffer,_In_ ULONG UncompressedBufferSize,_Out_ PUCHAR CompressedBuffer,_In_ ULONG CompressedBufferSize,_In_ ULONG UncompressedChunkSize,_Out_ PULONG FinalCompressedSize,_In_ PVOID WorkSpace);typedef NTSTATUS(WINAPI *typedef_RtlDecompressBuffer)(_In_ USHORT CompressionFormat,_Out_ PUCHAR UncompressedBuffer,_In_ ULONG UncompressedBufferSize,_In_ PUCHAR CompressedBuffer,_In_ ULONG CompressedBufferSize,_Out_ PULONG FinalUncompressedSize);// 数据压缩 BOOL CompressData(BYTE *pUncompressData, DWORD dwUncompressDataLength, BYTE **ppCompressData, DWORD *pdwCompressDataLength) {BOOL bRet FALSE;NTSTATUS status 0;HMODULE hModule NULL;typedef_RtlGetCompressionWorkSpaceSize RtlGetCompressionWorkSpaceSize NULL;typedef_RtlCompressBuffer RtlCompressBuffer NULL;DWORD dwWorkSpaceSize 0, dwFragmentWorkSpaceSize 0;BYTE *pWorkSpace NULL;BYTE *pCompressData NULL;DWORD dwCompressDataLength 4096;DWORD dwFinalCompressSize 0;do{// 加载 ntdll.dll hModule ::LoadLibrary(ntdll.dll);if (NULL hModule){ShowError(LoadLibrary);break;}// 获取 RtlGetCompressionWorkSpaceSize 函数地址RtlGetCompressionWorkSpaceSize (typedef_RtlGetCompressionWorkSpaceSize)::GetProcAddress(hModule, RtlGetCompressionWorkSpaceSize);if (NULL RtlGetCompressionWorkSpaceSize){ShowError(GetProcAddress);break;}// 获取 RtlCompressBuffer 函数地址RtlCompressBuffer (typedef_RtlCompressBuffer)::GetProcAddress(hModule, RtlCompressBuffer);if (NULL RtlCompressBuffer){ShowError(GetProcAddress);break;}// 获取WorkSpqce大小status RtlGetCompressionWorkSpaceSize(COMPRESSION_FORMAT_LZNT1 | COMPRESSION_ENGINE_STANDARD, dwWorkSpaceSize, dwFragmentWorkSpaceSize);if (0 ! status){break;}// 申请动态内存pWorkSpace new BYTE[dwWorkSpaceSize];if (NULL pWorkSpace){break;}::RtlZeroMemory(pWorkSpace, dwWorkSpaceSize);while (TRUE){// 申请动态内存pCompressData new BYTE[dwCompressDataLength];if (NULL pCompressData){break;}::RtlZeroMemory(pCompressData, dwCompressDataLength);// 调用RtlCompressBuffer压缩数据RtlCompressBuffer(COMPRESSION_FORMAT_LZNT1, pUncompressData, dwUncompressDataLength, pCompressData, dwCompressDataLength, 4096, dwFinalCompressSize, (PVOID)pWorkSpace);if (dwCompressDataLength dwFinalCompressSize){// 释放内存if (pCompressData){delete[]pCompressData;pCompressData NULL;}dwCompressDataLength dwFinalCompressSize;}else{break;}}// 返回*ppCompressData pCompressData;*pdwCompressDataLength dwFinalCompressSize;bRet TRUE;} while (FALSE);// 释放if (pWorkSpace){delete[]pWorkSpace;pWorkSpace NULL;}if (hModule){::FreeLibrary(hModule);}return bRet; }// 数据解压缩 BOOL UncompressData(BYTE *pCompressData, DWORD dwCompressDataLength, BYTE **ppUncompressData, DWORD *pdwUncompressDataLength) {BOOL bRet FALSE;HMODULE hModule NULL;typedef_RtlDecompressBuffer RtlDecompressBuffer NULL;BYTE *pUncompressData NULL;DWORD dwUncompressDataLength 4096;DWORD dwFinalUncompressSize 0;do{// 加载 ntdll.dll hModule ::LoadLibrary(ntdll.dll);if (NULL hModule){break;}// 获取 RtlDecompressBuffer 函数地址RtlDecompressBuffer (typedef_RtlDecompressBuffer)::GetProcAddress(hModule, RtlDecompressBuffer);if (NULL RtlDecompressBuffer){break;}while (TRUE){// 申请动态内存pUncompressData new BYTE[dwUncompressDataLength];if (NULL pUncompressData){break;}::RtlZeroMemory(pUncompressData, dwUncompressDataLength);// 调用RtlCompressBuffer压缩数据RtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1, pUncompressData, dwUncompressDataLength, pCompressData, dwCompressDataLength, dwFinalUncompressSize);if (dwUncompressDataLength dwFinalUncompressSize){// 释放内存if (pUncompressData){delete[]pUncompressData;pUncompressData NULL;}dwUncompressDataLength dwFinalUncompressSize;}else{break;}}// 返回*ppUncompressData pUncompressData;*pdwUncompressDataLength dwFinalUncompressSize;bRet TRUE;} while (FALSE);// 释放if (hModule){::FreeLibrary(hModule);}return bRet; }int main(int argc, char *argv[]) {DWORD i 0;BOOL bRet FALSE;char szBuffer[] DDDDDDDDDDGGGGGGGGGGGG;DWORD dwBufferLength ::lstrlen(szBuffer);BYTE *pCompressData NULL;DWORD dwCompressDataLength 0;BYTE *pUncompressData NULL;DWORD dwUncompressDataLength 0;// 压缩数据CompressData((BYTE *)szBuffer, dwBufferLength, pCompressData, dwCompressDataLength);// 解压数据UncompressData(pCompressData, dwCompressDataLength, pUncompressData, dwUncompressDataLength);// 显示printf(原数据为:\n);for (i 0; i dwBufferLength; i){printf(%X , szBuffer[i]);}printf(\n\n压缩数据为:\n);for (i 0; i dwCompressDataLength; i){printf(%X , pCompressData[i]);}printf(\n\n解压缩数据为:\n);for (i 0; i dwUncompressDataLength; i){printf(%X , pUncompressData[i]);}printf(\n);// 释放if (pUncompressData){delete[]pUncompressData;pUncompressData NULL;}if (pCompressData){delete[]pCompressData;pCompressData NULL;}system(pause);return 0; }
http://www.zqtcl.cn/news/571645/

相关文章:

  • 沈阳建设网站费用群晖wordpress打不开
  • jsp网站开发 pdf建设植绒衣架网站
  • 做网站接单的网站做外贸网站价位
  • 金融商城快捷申请网站模板下载汕头网站建设和运营
  • 网站建设网站备案所需资料请兼职做企业网站设计怎么收费
  • 电脑配件经营网站的建设论文邯郸市环保局网站建设项目环境
  • 那些网站可以做反链免费游戏不用登录直接玩
  • 安徽网站建设的基本步骤接外贸订单的平台
  • 那些网站可以找得到做货代的广东企业微信网站开发
  • 海宁市建设局官方网站6哔哩哔哩网页版官网在线观看
  • 泉州网站建设轩奇网讯韩国美容网站模板
  • 培训好吗网站建设wordpress手游
  • 元典科技网站建设网页设计制作图片页面
  • 网站设置什么意思无代码搭建平台
  • 织梦做的网站后台登录做网站购买域名
  • 哈尔滨网站关键词优化排名合江做网站
  • 手机网站自动适配旅游网络营销方案
  • 敦化网站开发黔东南购物网站开发设计
  • 建设一个网站 需要提供什么如何免费推广自己的网站
  • 佛山企业网站制作公司中国互联网企业100强榜单
  • 买了域名就可以做网站怎么创造游戏软件
  • 广东广州电脑个人建站徐州网站排名公司
  • 网站优化 流量做网站对企业有什么好处
  • 建设机械网站制作人工智能工程师月薪多少
  • wordpress 百度站长沈阳app开发公司哪家好
  • 做网站平台公司网站建设硬件环境
  • 可视化编辑建站平台新密市城乡建设局网站
  • 电子商务的网站的建设内容wordpress主题 微软
  • 什么软件可以做动画视频网站网站的按钮怎么做 视频
  • 饰品做商城网站模式17网站一起做网店新塘