阅读:1237回复:1
socket函数为什么是 "return -(int)s;"
httpdisk source code中的socket函数:
int __cdecl socket(int af, int type, int protocol) { PSOCKET s; if (af != AF_INET || (type != SOCK_DGRAM && type != SOCK_STREAM) || (type == SOCK_DGRAM && protocol != IPPROTO_UDP && protocol != 0) || (type == SOCK_STREAM && protocol != IPPROTO_TCP && protocol != 0) ) { return STATUS_INVALID_PARAMETER; } s = (PSOCKET) ExAllocatePool(NonPagedPool, sizeof(SOCKET)); if (!s) { return STATUS_INSUFFICIENT_RESOURCES; } RtlZeroMemory(s, sizeof(SOCKET)); s->type = type; s->addressHandle = (HANDLE) -1; return -(int)s; //why -s ? } 申请了一块非分页的buffer, size为sizeof(SOCKET), buffer的地址s应该是在kernel 空间, 也就是s >= 0x80000000 但为什么返回是 - (int) s, 那么此时s < =0x80000000, 也就是s位于user 空间。 可是此时s的新地址上并不是我们分配的空间啊? 难道是在调用ExAllocatePool(NonPagedPool, sizeof(SOCKET))时,系统实际上是映射向user空间的? 请高手解释! |
|
|
沙发#
发布于:2009-02-17 18:00
期待强人解答。
|
|
|