|
|
本帖最后由 HalloWord 于 2025-9-2 21:20 编辑
各位大佬们,问一下
jscript使用adodb.stream
- var ado=WScript.CreateObject('adodb.stream');
- ado.open();
- ado.writetext('1111111');
- //...
复制代码 写文件时用的open方法据说是写在内存里的,这有什么限制没?比如大小限制之类的
还有怎么不写在内存,直接open一个文件,然后往里面写内容?
网上找了好久都找不到相关信息
========超华丽的分割线========
嗯嗯,winapi太难用了,而且好多东西要自己实现
想用musl libc,但是不知道支不支持windows
暂时就这样了,弄了个简单的部分读取文件并输出的exe,其他的然后交给jscript或bat再处理,编译后体积不到4k,压缩一下不到2k,将bytes弄成hex字符串输进去后再还原应该要不了多久,
祈祷不会出问题
- #define _USING_V140_SDK71
- #define UNICODE
- #include <windows.h>
- #pragma comment(lib, "kernel32")
- #pragma comment(lib, "shell32")
- #define size_of_buff (sizeof(char)*1024*64*64)
- int read_partial(wchar_t*,wchar_t*,long long,long long);
- long long atoll2(const wchar_t*);
- /*
- for 32bit winxp
- msvc link with /entry:mei /subsystem:console,5.01
- gcc and clang do not know
- */
- int mei(){
- int argc;
- wchar_t **argv;
- argv=CommandLineToArgvW(GetCommandLineW(), &argc);
- int v=-1;
- if(argc<5)goto end;
- long long _start=atoll2(*(argv+3));
- long long _size=atoll2(*(argv+4));
- if(!_size)goto end;
- v=read_partial(*(argv+1),*(argv+2),_start,_size);
- end:
- LocalFree(argv);
- return v;
- }
- int read_partial(wchar_t *file_in,wchar_t *file_out,long long read_start,long long read_size){
- int v=0;
- LPVOID chars_buff=VirtualAlloc(NULL,size_of_buff,MEM_RESERVE|MEM_COMMIT,PAGE_READWRITE);
- if(NULL==chars_buff)return GetLastError();
- HANDLE in_file_handle=CreateFileW(file_in,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
- if(INVALID_HANDLE_VALUE==in_file_handle)return 1;
- HANDLE out_file_handle=CreateFileW(file_out,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
- if(INVALID_HANDLE_VALUE==out_file_handle){
- CloseHandle(in_file_handle);
- return 2;
- }
-
- LARGE_INTEGER _size;
- _size.QuadPart=read_start;
- if(!SetFilePointerEx(in_file_handle,_size,NULL,FILE_BEGIN)){
- v=GetLastError();
- goto end;
- }
-
- DWORD chars_read,chars_write;
- long long t=0;
- while(ReadFile(in_file_handle,chars_buff,size_of_buff,&chars_read,NULL)){
- if(0==chars_read)break;
- t+=chars_read;
- if(t>read_size){
- chars_read=chars_read-(DWORD)(t-read_size);
- }
- if (!WriteFile(out_file_handle,chars_buff,chars_read,&chars_write,NULL)) {
- v=GetLastError();
- goto end;
- }
- if(t>read_size)break;
- }
- end:
- CloseHandle(in_file_handle);
- CloseHandle(out_file_handle);
- VirtualFree(chars_buff,0,MEM_RELEASE);
- return v;
- }
- long long atoll2(const wchar_t *s){
- long long num=0;
- int neg=0;
- while(*s&&(*s<=' '))s++;
- if(*s){
- if(*s=='-'){neg=1;s++;}
- if(*s=='+'){s++;}
- }
- while((*s>='0')&&(*s<='9')){
- num=10*num-(*s-'0');
- s++;
- }
- return neg?num:-num;
- }
复制代码 |
评分
-
查看全部评分
|