Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ NtConnectPort错误_C++_Internals - Fatal编程技术网

C++ NtConnectPort错误

C++ NtConnectPort错误,c++,internals,C++,Internals,我尝试调用函数NtConnectPort—我创建一个节,然后将该节转发到NtConnectPort 我从函数NtConnectPort中得到一个运行错误。返回值为c000000d-参数不正确 我不明白为什么。有什么想法吗 守则: HANDLE hSection=0; LARGE_INTEGER SecSize; SecSize.LowPart=0x10000; SecSize.HighPart=0x0; if(NtCreateSection(&hSection, SECTION_AL

我尝试调用函数NtConnectPort—我创建一个节,然后将该节转发到NtConnectPort

我从函数NtConnectPort中得到一个运行错误。返回值为c000000d-参数不正确

我不明白为什么。有什么想法吗

守则:

HANDLE hSection=0;
LARGE_INTEGER SecSize;

SecSize.LowPart=0x10000;
SecSize.HighPart=0x0;

if(NtCreateSection(&hSection, SECTION_ALL_ACCESS, NULL, &SecSize, PAGE_READWRITE,SEC_COMMIT ,NULL))
{
    printf("couldn't create a section");
}

HANDLE hPort;
LPC_SECTION_OWNER_MEMORY sectionInfo;
LPC_SECTION_MEMORY mapInfo;
byte ConnectDataBuffer[0x100];
DWORD Size = sizeof(ConnectDataBuffer);
UNICODE_STRING uStr;
WCHAR * uString=L"\\SmApiPort";
DWORD maxSize;
SECURITY_QUALITY_OF_SERVICE qos;

for (int i=0 ; i < 0x100 ; i++)
{
    ConnectDataBuffer[i]=0x0;
}

memset(&sectionInfo, 0, sizeof(sectionInfo));
memset(&mapInfo, 0, sizeof(mapInfo));

sectionInfo.Length = 24;
sectionInfo.SectionHandle =hSection;
sectionInfo.ViewSize = 0x10000;

mapInfo.Length = 0x0C;

uStr.Length = wcslen(uString)*2;
uStr.MaximumLength = wcslen(uString)*2+2;
uStr.Buffer =uString;


NTSTATUS res = NtConnectPort(&hPort,&uStr,&qos,(LPC_SECTION_OWNER_MEMORY*)&sectionInfo,(LPC_SECTION_MEMORY*)&mapInfo,&maxSize,(DWORD*)ConnectDataBuffer,&Size);
if (res)
{
    printf("Could not connect to LPC port.\n -%x", res);
    return 1;
}



typedef struct _LPC_SECTION_OWNER_MEMORY {
ULONG                   Length;
HANDLE                  SectionHandle;
ULONG                   OffsetInSection;
ULONG                   ViewSize;
PVOID                   ViewBase;
PVOID                   OtherSideViewBase;
} LPC_SECTION_OWNER_MEMORY, *PLPC_SECTION_OWNER_MEMORY;

typedef struct _LPC_SECTION_MEMORY {
ULONG                   Length;
ULONG                   ViewSize;
PVOID                   ViewBase;
} LPC_SECTION_MEMORY, *PLPC_SECTION_MEMORY;


NTSYSAPI NTSTATUS NTAPI NtConnectPort(
OUT PHANDLE PortHandle,
IN  PUNICODE_STRING PortName,
IN  PSECURITY_QUALITY_OF_SERVICE SecurityQos,
//IN  OUT PPORT_VIEW ClientView OPTIONAL,
IN OUT PLPC_SECTION_OWNER_MEMORY ClientSharedMemory,
OUT PLPC_SECTION_MEMORY ServerSharedMemory,
//OUT PREMOTE_PORT_VIEW ServerView OPTIONAL,
OUT PULONG MaxMessageLength OPTIONAL,
IN  OUT PVOID ConnectionInformation OPTIONAL,
IN  OUT PULONG ConnectionInformationLength OPTIONAL
);


NTSYSAPI NTSTATUS NTAPI ZwConnectPort(
OUT PHANDLE PortHandle,
IN  PUNICODE_STRING PortName,
IN  PSECURITY_QUALITY_OF_SERVICE SecurityQos,
IN OUT PLPC_SECTION_OWNER_MEMORY ClientSharedMemory,
OUT PLPC_SECTION_MEMORY ServerSharedMemory,
//IN OUT int int1,
//IN  OUT PPORT_VIEW ClientView OPTIONAL,
//OUT PREMOTE_PORT_VIEW ServerView OPTIONAL,
OUT PULONG MaxMessageLength OPTIONAL,
IN  OUT PVOID ConnectionInformation OPTIONAL,
IN  OUT PULONG ConnectionInformationLength OPTIONAL
);
handlehsection=0;
大整数秒大小;
SecSize.LowPart=0x10000;
SecSize.HighPart=0x0;
if(NtCreateSection(&hsSection,SECTION_ALL_ACCESS,NULL,&SecSize,PAGE_READWRITE,SEC_COMMIT,NULL))
{
printf(“无法创建节”);
}
处理hPort;
LPC_段_所有者_内存段信息;
LPC_段_内存mapInfo;
字节ConnectDataBuffer[0x100];
DWORD大小=sizeof(ConnectDataBuffer);
UNICODE_字符串uStr;
WCHAR*uString=L“\\SmApiPort”;
德沃德·马克斯;
安全、质量、服务质量;
对于(int i=0;i<0x100;i++)
{
ConnectDataBuffer[i]=0x0;
}
memset(§ionInfo,0,sizeof(sectionInfo));
memset(&mapInfo,0,sizeof(mapInfo));
sectionInfo.Length=24;
sectionInfo.SectionHandle=hs节;
sectionInfo.ViewSize=0x10000;
mapInfo.Length=0x0C;
美国贸易长度=wcslen(美国贸易)*2;
uStr.MaximumLength=wcslen(uStr)*2+2;
uStr.Buffer=uString;
NTSTATUS res=NtConnectPort(&hPort,&uStr,&qos,(LPC_段\所有者\内存*)§ionInfo,(LPC_段\内存*)&mapInfo,&maxSize,(DWORD*)CONNECTDATABUFER,&Size);
如果(res)
{
printf(“无法连接到LPC端口。\n-%x”,res);
返回1;
}
类型定义结构\u LPC\u节\u所有者\u内存{
乌龙长度;
手柄部分手柄;
乌龙组;
ULONG视图大小;
PVOID视图库;
PVOID OtherSideViewBase;
}LPC区段所有者存储器、*PLPC区段所有者存储器;
类型定义结构\u LPC\u节\u内存{
乌龙长度;
ULONG视图大小;
PVOID视图库;
}LPC_段_存储器,*PLPC_段_存储器;
NTSYSAPI NTSTATUS NTAPI NtConnectPort(
出了幻影门把手,
在PUNICODE_字符串PortName中,
在PSECURITY\u QUALITY\u OF服务安全QoS中,
//输入输出支持\视图客户端视图可选,
IN-OUT PLPC_SECTION_OWNER_MEMORY ClientSharedMemory,
OUT PLPC_段_内存服务器SharedMemory,
//OUT PREMOTE\u PORT\u VIEW服务器视图可选,
OUT PULONG MaxMessageLength可选,
输入输出PVOID连接信息可选,
输入输出PULONG连接信息长度可选
);
NTSYSAPI NTSTATUS NTAPI ZwConnectPort(
出了幻影门把手,
在PUNICODE_字符串PortName中,
在PSECURITY\u QUALITY\u OF服务安全QoS中,
IN-OUT PLPC_SECTION_OWNER_MEMORY ClientSharedMemory,
OUT PLPC_段_内存服务器SharedMemory,
//输入输出int int1,
//输入输出支持\视图客户端视图可选,
//OUT PREMOTE\u PORT\u VIEW服务器视图可选,
OUT PULONG MaxMessageLength可选,
输入输出PVOID连接信息可选,
输入输出PULONG连接信息长度可选
);

您没有初始化
qos
变量()

SecurityQos—指向指定级别的结构 端口侦听器可用的模拟数


可能是因为
qos
没有初始化。这是另一个问题,它与QoSMake另一个问题无关。我不想问这个问题,但它在注释、编辑之间变得混乱,并且偏离了原始问题的主题。