mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-01-18 12:29:32 +08:00
* fhandler_socket.cc (fhandler_socket::bind): Drop has_exclusiveaddruse
condition. Fix comment about availability. Move remaining comment to the right spot. Drop has_ip_helper_lib condition. * net.cc (cygwin_setsockopt): Drop has_disabled_user_tos_setting condition. Fix comment. (get_2k_ifs): Fix comment. (get_nt_ifs): Remove. (getifaddrs): Drop call to get_nt_ifs. (get_ifconf): Ditto. * wincap.cc: Throughout, drop has_ip_helper_lib, has_disabled_user_tos_setting, and has_exclusiveaddruse settings from wincaps. (wincap_unknown): Remove. (wincap_nt4): Remove. (wincap_minimal): New macro, set to wincap_nt4sp4 for now. (wincapc::init): Drop test for pre-SP4 NT4. Just imply at least NT SP4. Replace references to wincap_unknown with references to wincap_minimal. * wincap.h (struct wincaps): Drop has_ip_helper_lib, has_disabled_user_tos_setting, and has_exclusiveaddruse flags and methods.
This commit is contained in:
parent
92626febdd
commit
6fe59500e5
@ -1,6 +1,29 @@
|
|||||||
2010-09-25 Corinna Vinschen <corinna@vinschen.de>
|
2010-09-25 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* autoload.cc: Throughout. order entry points alphabetically by DLL
|
* fhandler_socket.cc (fhandler_socket::bind): Drop has_exclusiveaddruse
|
||||||
|
condition. Fix comment about availability. Move remaining comment to
|
||||||
|
the right spot. Drop has_ip_helper_lib condition.
|
||||||
|
* net.cc (cygwin_setsockopt): Drop has_disabled_user_tos_setting
|
||||||
|
condition. Fix comment.
|
||||||
|
(get_2k_ifs): Fix comment.
|
||||||
|
(get_nt_ifs): Remove.
|
||||||
|
(getifaddrs): Drop call to get_nt_ifs.
|
||||||
|
(get_ifconf): Ditto.
|
||||||
|
* wincap.cc: Throughout, drop has_ip_helper_lib,
|
||||||
|
has_disabled_user_tos_setting, and has_exclusiveaddruse settings from
|
||||||
|
wincaps.
|
||||||
|
(wincap_unknown): Remove.
|
||||||
|
(wincap_nt4): Remove.
|
||||||
|
(wincap_minimal): New macro, set to wincap_nt4sp4 for now.
|
||||||
|
(wincapc::init): Drop test for pre-SP4 NT4. Just imply at least NT SP4.
|
||||||
|
Replace references to wincap_unknown with references to wincap_minimal.
|
||||||
|
* wincap.h (struct wincaps): Drop has_ip_helper_lib,
|
||||||
|
has_disabled_user_tos_setting, and has_exclusiveaddruse flags and
|
||||||
|
methods.
|
||||||
|
|
||||||
|
2010-09-25 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* autoload.cc: Throughout, order entry points alphabetically by DLL
|
||||||
and function name. Make functions which are available on all supported
|
and function name. Make functions which are available on all supported
|
||||||
systems non-optional. Fix return value on entry points imported from
|
systems non-optional. Fix return value on entry points imported from
|
||||||
secur32.dll. Add comment.
|
secur32.dll. Add comment.
|
||||||
|
@ -1035,52 +1035,47 @@ fhandler_socket::bind (const struct sockaddr *name, int namelen)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* If the application didn't explicitely call setsockopt (SO_REUSEADDR),
|
if (!saw_reuseaddr ())
|
||||||
enforce exclusive local address use using the SO_EXCLUSIVEADDRUSE
|
|
||||||
socket option, to emulate POSIX socket behaviour more closely.
|
|
||||||
|
|
||||||
KB 870562: Note that this option is only available since NT4 SP4.
|
|
||||||
Also note that a bug in Win2K SP1-3 and XP up to SP1 only enables
|
|
||||||
this option for users in the local administrators group. */
|
|
||||||
if (wincap.has_exclusiveaddruse ())
|
|
||||||
{
|
{
|
||||||
if (!saw_reuseaddr ())
|
/* If the application didn't explicitely call setsockopt
|
||||||
{
|
(SO_REUSEADDR), enforce exclusive local address use using the
|
||||||
int on = 1;
|
SO_EXCLUSIVEADDRUSE socket option, to emulate POSIX socket
|
||||||
int ret = ::setsockopt (get_socket (), SOL_SOCKET,
|
behaviour more closely.
|
||||||
~(SO_REUSEADDR),
|
|
||||||
(const char *) &on, sizeof on);
|
|
||||||
debug_printf ("%d = setsockopt (SO_EXCLUSIVEADDRUSE), %E", ret);
|
|
||||||
}
|
|
||||||
else if (!wincap.has_enhanced_socket_security ())
|
|
||||||
{
|
|
||||||
debug_printf ("SO_REUSEADDR set");
|
|
||||||
/* There's a bug in SO_REUSEADDR handling in WinSock.
|
|
||||||
Per standards, we must not be able to reuse a complete
|
|
||||||
duplicate of a local TCP address (same IP, same port),
|
|
||||||
even if SO_REUSEADDR has been set. That's unfortunately
|
|
||||||
possible in WinSock.
|
|
||||||
|
|
||||||
So we're testing here if the local address is already in
|
KB 870562: Note that a bug in Win2K SP1-3 and XP up to SP1 only
|
||||||
use and don't bind, if so. This only works for OSes with
|
enables this option for users in the local administrators group. */
|
||||||
IP Helper support and is, of course, still prone to races.
|
int on = 1;
|
||||||
|
int ret = ::setsockopt (get_socket (), SOL_SOCKET,
|
||||||
|
~(SO_REUSEADDR),
|
||||||
|
(const char *) &on, sizeof on);
|
||||||
|
debug_printf ("%d = setsockopt (SO_EXCLUSIVEADDRUSE), %E", ret);
|
||||||
|
}
|
||||||
|
else if (!wincap.has_enhanced_socket_security ())
|
||||||
|
{
|
||||||
|
debug_printf ("SO_REUSEADDR set");
|
||||||
|
/* There's a bug in SO_REUSEADDR handling in WinSock.
|
||||||
|
Per standards, we must not be able to reuse a complete
|
||||||
|
duplicate of a local TCP address (same IP, same port),
|
||||||
|
even if SO_REUSEADDR has been set. That's unfortunately
|
||||||
|
possible in WinSock.
|
||||||
|
|
||||||
However, we don't have to do this on systems supporting
|
So we're testing here if the local address is already in
|
||||||
"enhanced socket security" (2K3 and later). On these
|
use and don't bind, if so. This only works for OSes with
|
||||||
systems the default binding behaviour is exactly as you'd
|
IP Helper support and is, of course, still prone to races.
|
||||||
expect for SO_REUSEADDR, while setting SO_REUSEADDR re-enables
|
|
||||||
the wrong behaviour. So all we have to do on these newer
|
However, we don't have to do this on systems supporting
|
||||||
systems is never to set SO_REUSEADDR but only to note that
|
"enhanced socket security" (2K3 and later). On these
|
||||||
it has been set for the above SO_EXCLUSIVEADDRUSE setting.
|
systems the default binding behaviour is exactly as you'd
|
||||||
See setsockopt() in net.cc. */
|
expect for SO_REUSEADDR, while setting SO_REUSEADDR re-enables
|
||||||
if (get_socket_type () == SOCK_STREAM
|
the wrong behaviour. So all we have to do on these newer
|
||||||
&& wincap.has_ip_helper_lib ()
|
systems is never to set SO_REUSEADDR but only to note that
|
||||||
&& address_in_use (name))
|
it has been set for the above SO_EXCLUSIVEADDRUSE setting.
|
||||||
{
|
See setsockopt() in net.cc. */
|
||||||
debug_printf ("Local address in use, don't bind");
|
if (get_socket_type () == SOCK_STREAM && address_in_use (name))
|
||||||
set_errno (EADDRINUSE);
|
{
|
||||||
goto out;
|
debug_printf ("Local address in use, don't bind");
|
||||||
}
|
set_errno (EADDRINUSE);
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (::bind (get_socket (), name, namelen))
|
if (::bind (get_socket (), name, namelen))
|
||||||
|
@ -742,11 +742,9 @@ cygwin_setsockopt (int fd, int level, int optname, const void *optval,
|
|||||||
Sidenote: The reasoning for dropping ToS in Win2K is that ToS
|
Sidenote: The reasoning for dropping ToS in Win2K is that ToS
|
||||||
per RFC 1349 is incompatible with DiffServ per RFC 2474/2475.
|
per RFC 1349 is incompatible with DiffServ per RFC 2474/2475.
|
||||||
|
|
||||||
We just ignore the return value of setting IP_TOS under Windows
|
We just ignore the return value of setting IP_TOS entirely. */
|
||||||
2000 and above entirely. */
|
|
||||||
if (level == IPPROTO_IP && optname == IP_TOS
|
if (level == IPPROTO_IP && optname == IP_TOS
|
||||||
&& WSAGetLastError () == WSAEINVAL
|
&& WSAGetLastError () == WSAEINVAL)
|
||||||
&& wincap.has_disabled_user_tos_setting ())
|
|
||||||
{
|
{
|
||||||
debug_printf ("Faked IP_TOS success");
|
debug_printf ("Faked IP_TOS success");
|
||||||
res = 0;
|
res = 0;
|
||||||
@ -2034,8 +2032,7 @@ done:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get network interfaces NTSP4, W2K, XP w/o service packs.
|
* Get network interfaces up to XP w/o service packs.
|
||||||
* Use IP Helper Library
|
|
||||||
*/
|
*/
|
||||||
static struct ifall *
|
static struct ifall *
|
||||||
get_2k_ifs ()
|
get_2k_ifs ()
|
||||||
@ -2232,251 +2229,6 @@ done:
|
|||||||
return ifret;
|
return ifret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Get network interfaces Windows NT < SP4:
|
|
||||||
* Look at the Bind value in
|
|
||||||
* HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Linkage\
|
|
||||||
* This is a REG_MULTI_SZ with strings of the form:
|
|
||||||
* \Device\<Netcard>, where netcard is the name of the net device.
|
|
||||||
* Then look under:
|
|
||||||
* HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<NetCard>\
|
|
||||||
* Parameters\Tcpip
|
|
||||||
* at the IPAddress, Subnetmask and DefaultGateway values for the
|
|
||||||
* required values.
|
|
||||||
* Also fake "lo" since there's no representation in the registry.
|
|
||||||
*/
|
|
||||||
static struct ifall *
|
|
||||||
get_nt_ifs ()
|
|
||||||
{
|
|
||||||
HKEY key;
|
|
||||||
LONG ret;
|
|
||||||
struct ifall *ifret = NULL, *ifp;
|
|
||||||
unsigned long lip, lnp;
|
|
||||||
struct sockaddr_in *sin = NULL;
|
|
||||||
DWORD size;
|
|
||||||
int cnt = 0, idx;
|
|
||||||
char *binding = NULL;
|
|
||||||
|
|
||||||
if ((ret = RegOpenKeyEx (HKEY_LOCAL_MACHINE,
|
|
||||||
"SYSTEM\\"
|
|
||||||
"CurrentControlSet\\"
|
|
||||||
"Services\\"
|
|
||||||
"Tcpip\\" "Linkage",
|
|
||||||
0, KEY_READ, &key)) == ERROR_SUCCESS)
|
|
||||||
{
|
|
||||||
if ((ret = RegQueryValueEx (key, "Bind", NULL, NULL,
|
|
||||||
NULL, &size)) == ERROR_SUCCESS)
|
|
||||||
{
|
|
||||||
binding = (char *) alloca (size);
|
|
||||||
if ((ret = RegQueryValueEx (key, "Bind", NULL, NULL,
|
|
||||||
(unsigned char *) binding,
|
|
||||||
&size)) != ERROR_SUCCESS)
|
|
||||||
binding = NULL;
|
|
||||||
}
|
|
||||||
RegCloseKey (key);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!binding)
|
|
||||||
{
|
|
||||||
__seterrno_from_win_error (ret);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *bp, eth[2] = "/";
|
|
||||||
char cardkey[256], ipaddress[256], netmask[256];
|
|
||||||
|
|
||||||
for (bp = binding; *bp; bp += strlen (bp) + 1)
|
|
||||||
{
|
|
||||||
bp += strlen ("\\Device\\");
|
|
||||||
strcpy (cardkey, "SYSTEM\\CurrentControlSet\\Services\\");
|
|
||||||
strcat (cardkey, bp);
|
|
||||||
strcat (cardkey, "\\Parameters\\Tcpip");
|
|
||||||
|
|
||||||
if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, cardkey,
|
|
||||||
0, KEY_READ, &key) != ERROR_SUCCESS)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (RegQueryValueEx (key, "IPAddress",
|
|
||||||
NULL, NULL,
|
|
||||||
(unsigned char *) ipaddress,
|
|
||||||
(size = 256, &size)) == ERROR_SUCCESS
|
|
||||||
&& RegQueryValueEx (key, "SubnetMask",
|
|
||||||
NULL, NULL,
|
|
||||||
(unsigned char *) netmask,
|
|
||||||
(size = 256, &size)) == ERROR_SUCCESS)
|
|
||||||
++cnt;
|
|
||||||
RegCloseKey (key);
|
|
||||||
}
|
|
||||||
++cnt; /* loopback */
|
|
||||||
if (!(ifret = (struct ifall *) malloc (cnt * sizeof (struct ifall))))
|
|
||||||
return NULL;
|
|
||||||
/* Set up lo interface first */
|
|
||||||
idx = 0;
|
|
||||||
ifp = ifret + idx;
|
|
||||||
memset (ifp, 0, sizeof *ifp);
|
|
||||||
/* Next in chain */
|
|
||||||
ifp->ifa_ifa.ifa_next = (struct ifaddrs *) &ifp[1].ifa_ifa;
|
|
||||||
/* Interface name */
|
|
||||||
strcpy (ifp->ifa_name, "lo");
|
|
||||||
ifp->ifa_ifa.ifa_name = ifp->ifa_name;
|
|
||||||
/* Flags */
|
|
||||||
ifp->ifa_ifa.ifa_flags = IFF_UP | IFF_LOWER_UP | IFF_RUNNING | IFF_LOOPBACK;
|
|
||||||
/* Address */
|
|
||||||
sin = (struct sockaddr_in *) &ifp->ifa_addr;
|
|
||||||
sin->sin_addr.s_addr = htonl (INADDR_LOOPBACK);
|
|
||||||
sin->sin_family = AF_INET;
|
|
||||||
ifp->ifa_ifa.ifa_addr = (struct sockaddr *) &ifp->ifa_addr;
|
|
||||||
/* Netmask */
|
|
||||||
sin = (struct sockaddr_in *) &ifp->ifa_netmask;
|
|
||||||
sin->sin_addr.s_addr = htonl (IN_CLASSA_NET);
|
|
||||||
sin->sin_family = AF_INET;
|
|
||||||
ifp->ifa_ifa.ifa_netmask = (struct sockaddr *) &ifp->ifa_netmask;
|
|
||||||
/* Broadcast address */
|
|
||||||
sin = (struct sockaddr_in *) &ifp->ifa_brddstaddr;
|
|
||||||
sin->sin_addr.s_addr = htonl (INADDR_LOOPBACK | IN_CLASSA_HOST);
|
|
||||||
sin->sin_family = AF_INET;
|
|
||||||
ifp->ifa_ifa.ifa_broadaddr = (struct sockaddr *) &ifp->ifa_brddstaddr;
|
|
||||||
/* Hardware address */
|
|
||||||
; // Nothing to do... */
|
|
||||||
/* Metric */
|
|
||||||
ifp->ifa_metric = 1;
|
|
||||||
/* MTU */
|
|
||||||
ifp->ifa_mtu = 1520; /* Default value for MS TCP Loopback interface. */
|
|
||||||
/* Interface index */
|
|
||||||
ifp->ifa_ifindex = -1;
|
|
||||||
/* Friendly name */
|
|
||||||
struct ifreq_frndlyname *iff = (struct ifreq_frndlyname *)
|
|
||||||
&ifp->ifa_frndlyname;
|
|
||||||
strcpy (iff->ifrf_friendlyname, "Default loopback");
|
|
||||||
iff->ifrf_len = 16;
|
|
||||||
|
|
||||||
for (bp = binding; *bp; bp += strlen (bp) + 1)
|
|
||||||
{
|
|
||||||
bp += strlen ("\\Device\\");
|
|
||||||
strcpy (cardkey, "SYSTEM\\CurrentControlSet\\Services\\");
|
|
||||||
strcat (cardkey, bp);
|
|
||||||
strcat (cardkey, "\\Parameters\\Tcpip");
|
|
||||||
|
|
||||||
if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, cardkey,
|
|
||||||
0, KEY_READ, &key) != ERROR_SUCCESS)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (RegQueryValueEx (key, "IPAddress",
|
|
||||||
NULL, NULL,
|
|
||||||
(unsigned char *) ipaddress,
|
|
||||||
(size = 256, &size)) == ERROR_SUCCESS
|
|
||||||
&& RegQueryValueEx (key, "SubnetMask",
|
|
||||||
NULL, NULL,
|
|
||||||
(unsigned char *) netmask,
|
|
||||||
(size = 256, &size)) == ERROR_SUCCESS)
|
|
||||||
{
|
|
||||||
char *ip, *np;
|
|
||||||
char dhcpaddress[256], dhcpnetmask[256];
|
|
||||||
bool ppp = false;
|
|
||||||
|
|
||||||
for (ip = ipaddress, np = netmask;
|
|
||||||
*ip && *np;
|
|
||||||
ip += strlen (ip) + 1, np += strlen (np) + 1)
|
|
||||||
{
|
|
||||||
bool dhcp = false;
|
|
||||||
if (cygwin_inet_addr (ip) == 0L
|
|
||||||
&& RegQueryValueEx (key, "DhcpIPAddress",
|
|
||||||
NULL, NULL,
|
|
||||||
(unsigned char *) dhcpaddress,
|
|
||||||
(size = 256, &size))
|
|
||||||
== ERROR_SUCCESS
|
|
||||||
&& RegQueryValueEx (key, "DhcpSubnetMask",
|
|
||||||
NULL, NULL,
|
|
||||||
(unsigned char *) dhcpnetmask,
|
|
||||||
(size = 256, &size))
|
|
||||||
== ERROR_SUCCESS)
|
|
||||||
dhcp = true;
|
|
||||||
if (++idx == cnt
|
|
||||||
&& !(ifp = (struct ifall *)
|
|
||||||
realloc (ifret, ++cnt * sizeof (struct ifall))))
|
|
||||||
{
|
|
||||||
free (ifret);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
ifp = ifret + idx;
|
|
||||||
memset (ifp, 0, sizeof *ifp);
|
|
||||||
/* Next in chain */
|
|
||||||
ifp->ifa_ifa.ifa_next = (struct ifaddrs *) &ifp[1].ifa_ifa;
|
|
||||||
/* Interface name */
|
|
||||||
if (!strncmp (bp, "NdisWan", 7))
|
|
||||||
{
|
|
||||||
strcpy (ifp->ifa_name, "ppp");
|
|
||||||
strcat (ifp->ifa_name, bp + 7);
|
|
||||||
ppp = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
++*eth;
|
|
||||||
strcpy (ifp->ifa_name, "eth");
|
|
||||||
strcat (ifp->ifa_name, eth);
|
|
||||||
}
|
|
||||||
ifp->ifa_ifa.ifa_name = ifp->ifa_name;
|
|
||||||
/* Flags */
|
|
||||||
ifp->ifa_ifa.ifa_flags = IFF_UP | IFF_LOWER_UP | IFF_RUNNING;
|
|
||||||
if (ppp)
|
|
||||||
ifp->ifa_ifa.ifa_flags |= IFF_POINTOPOINT | IFF_NOARP;
|
|
||||||
else
|
|
||||||
ifp->ifa_ifa.ifa_flags |= IFF_BROADCAST;
|
|
||||||
/* Address */
|
|
||||||
sin = (struct sockaddr_in *) &ifp->ifa_addr;
|
|
||||||
sin->sin_addr.s_addr = cygwin_inet_addr (dhcp ? dhcpaddress : ip);
|
|
||||||
sin->sin_family = AF_INET;
|
|
||||||
ifp->ifa_ifa.ifa_addr = (struct sockaddr *) &ifp->ifa_addr;
|
|
||||||
/* Netmask */
|
|
||||||
sin = (struct sockaddr_in *) &ifp->ifa_netmask;
|
|
||||||
sin->sin_addr.s_addr = cygwin_inet_addr (dhcp ? dhcpnetmask : np);
|
|
||||||
sin->sin_family = AF_INET;
|
|
||||||
ifp->ifa_ifa.ifa_netmask = (struct sockaddr *) &ifp->ifa_netmask;
|
|
||||||
if (ppp)
|
|
||||||
{
|
|
||||||
/* Destination address */
|
|
||||||
sin = (struct sockaddr_in *) &ifp->ifa_brddstaddr;
|
|
||||||
sin->sin_addr.s_addr =
|
|
||||||
cygwin_inet_addr (dhcp ? dhcpaddress : ip);
|
|
||||||
sin->sin_family = AF_INET;
|
|
||||||
ifp->ifa_ifa.ifa_dstaddr = (struct sockaddr *)
|
|
||||||
&ifp->ifa_brddstaddr;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Broadcast address */
|
|
||||||
lip = cygwin_inet_addr (dhcp ? dhcpaddress : ip);
|
|
||||||
lnp = cygwin_inet_addr (dhcp ? dhcpnetmask : np);
|
|
||||||
sin = (struct sockaddr_in *) &ifp->ifa_brddstaddr;
|
|
||||||
sin->sin_addr.s_addr = (lip & lnp) | ~lnp;
|
|
||||||
sin->sin_family = AF_INET;
|
|
||||||
ifp->ifa_ifa.ifa_broadaddr = (struct sockaddr *)
|
|
||||||
&ifp->ifa_brddstaddr;
|
|
||||||
}
|
|
||||||
/* Hardware address */
|
|
||||||
; // Nothing to do... */
|
|
||||||
/* Metric */
|
|
||||||
ifp->ifa_metric = 1;
|
|
||||||
/* MTU */
|
|
||||||
ifp->ifa_mtu = 1500;
|
|
||||||
/* Interface index */
|
|
||||||
ifp->ifa_ifindex = -1;
|
|
||||||
/* Friendly name */
|
|
||||||
struct ifreq_frndlyname *iff = (struct ifreq_frndlyname *)
|
|
||||||
&ifp->ifa_frndlyname;
|
|
||||||
strcpy (iff->ifrf_friendlyname, bp);
|
|
||||||
iff->ifrf_len = strlen (iff->ifrf_friendlyname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
RegCloseKey (key);
|
|
||||||
}
|
|
||||||
/* Since every entry is set to the next entry, the last entry points to an
|
|
||||||
invalid next entry now. Fix it retroactively. */
|
|
||||||
if (ifp > ifret)
|
|
||||||
ifp->ifa_ifa.ifa_next = NULL;
|
|
||||||
return ifret;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" int
|
extern "C" int
|
||||||
getifaddrs (struct ifaddrs **ifap)
|
getifaddrs (struct ifaddrs **ifap)
|
||||||
{
|
{
|
||||||
@ -2488,10 +2240,8 @@ getifaddrs (struct ifaddrs **ifap)
|
|||||||
struct ifall *ifp;
|
struct ifall *ifp;
|
||||||
if (wincap.has_gaa_prefixes () && !CYGWIN_VERSION_CHECK_FOR_OLD_IFREQ)
|
if (wincap.has_gaa_prefixes () && !CYGWIN_VERSION_CHECK_FOR_OLD_IFREQ)
|
||||||
ifp = get_xp_ifs (AF_UNSPEC);
|
ifp = get_xp_ifs (AF_UNSPEC);
|
||||||
else if (wincap.has_ip_helper_lib ())
|
|
||||||
ifp = get_2k_ifs ();
|
|
||||||
else
|
else
|
||||||
ifp = get_nt_ifs ();
|
ifp = get_2k_ifs ();
|
||||||
*ifap = &ifp->ifa_ifa;
|
*ifap = &ifp->ifa_ifa;
|
||||||
return ifp ? 0 : -1;
|
return ifp ? 0 : -1;
|
||||||
}
|
}
|
||||||
@ -2520,10 +2270,8 @@ get_ifconf (struct ifconf *ifc, int what)
|
|||||||
struct ifall *ifret, *ifp;
|
struct ifall *ifret, *ifp;
|
||||||
if (wincap.has_gaa_prefixes () && !CYGWIN_VERSION_CHECK_FOR_OLD_IFREQ)
|
if (wincap.has_gaa_prefixes () && !CYGWIN_VERSION_CHECK_FOR_OLD_IFREQ)
|
||||||
ifret = get_xp_ifs (AF_INET);
|
ifret = get_xp_ifs (AF_INET);
|
||||||
else if (wincap.has_ip_helper_lib ())
|
|
||||||
ifret = get_2k_ifs ();
|
|
||||||
else
|
else
|
||||||
ifret = get_nt_ifs ();
|
ifret = get_2k_ifs ();
|
||||||
if (!ifret)
|
if (!ifret)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
@ -20,90 +20,8 @@ details. */
|
|||||||
in the same session. I'm only writing this longish comment because I'm
|
in the same session. I'm only writing this longish comment because I'm
|
||||||
puzzled that this has never been noticed before... */
|
puzzled that this has never been noticed before... */
|
||||||
|
|
||||||
/* Minimal set of capabilities which is equivalent to NT4. */
|
/* Minimal set of capabilities required to run Cygwin. */
|
||||||
wincaps wincap_unknown __attribute__((section (".cygwin_dll_common"), shared)) = {
|
#define wincap_minimal wincap_nt4sp4
|
||||||
chunksize:0,
|
|
||||||
heapslop:0x0,
|
|
||||||
max_sys_priv:SE_CHANGE_NOTIFY_PRIVILEGE,
|
|
||||||
is_server:false,
|
|
||||||
has_dacl_protect:false,
|
|
||||||
has_ip_helper_lib:false,
|
|
||||||
has_broken_if_oper_status:false,
|
|
||||||
has_physical_mem_access:true,
|
|
||||||
has_process_io_counters:false,
|
|
||||||
has_terminal_services:false,
|
|
||||||
has_create_global_privilege:false,
|
|
||||||
has_ioctl_storage_get_media_types_ex:false,
|
|
||||||
has_extended_priority_class:false,
|
|
||||||
has_guid_volumes:false,
|
|
||||||
has_disk_ex_ioctls:false,
|
|
||||||
has_disabled_user_tos_setting:false,
|
|
||||||
has_fileid_dirinfo:false,
|
|
||||||
has_exclusiveaddruse:false,
|
|
||||||
has_enhanced_socket_security:false,
|
|
||||||
has_buggy_restart_scan:false,
|
|
||||||
has_mandatory_integrity_control:false,
|
|
||||||
needs_logon_sid_in_sid_list:true,
|
|
||||||
needs_count_in_si_lpres2:false,
|
|
||||||
has_recycle_dot_bin:false,
|
|
||||||
has_gaa_prefixes:false,
|
|
||||||
has_gaa_on_link_prefix:false,
|
|
||||||
supports_all_posix_ai_flags:false,
|
|
||||||
has_restricted_stack_args:false,
|
|
||||||
has_transactions:false,
|
|
||||||
ts_has_dep_problem:false,
|
|
||||||
has_recvmsg:false,
|
|
||||||
has_sendmsg:false,
|
|
||||||
has_broken_udf:false,
|
|
||||||
has_console_handle_problem:false,
|
|
||||||
has_broken_alloc_console:false,
|
|
||||||
has_always_all_codepages:false,
|
|
||||||
has_localenames:false,
|
|
||||||
has_mwmo_inputavailable:false,
|
|
||||||
has_buggy_thread_startup:false,
|
|
||||||
};
|
|
||||||
|
|
||||||
wincaps wincap_nt4 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
|
||||||
chunksize:0,
|
|
||||||
heapslop:0x0,
|
|
||||||
max_sys_priv:SE_CHANGE_NOTIFY_PRIVILEGE,
|
|
||||||
is_server:false,
|
|
||||||
has_dacl_protect:false,
|
|
||||||
has_ip_helper_lib:false,
|
|
||||||
has_broken_if_oper_status:false,
|
|
||||||
has_physical_mem_access:true,
|
|
||||||
has_process_io_counters:false,
|
|
||||||
has_terminal_services:false,
|
|
||||||
has_create_global_privilege:false,
|
|
||||||
has_ioctl_storage_get_media_types_ex:false,
|
|
||||||
has_extended_priority_class:false,
|
|
||||||
has_guid_volumes:false,
|
|
||||||
has_disk_ex_ioctls:false,
|
|
||||||
has_disabled_user_tos_setting:false,
|
|
||||||
has_fileid_dirinfo:false,
|
|
||||||
has_exclusiveaddruse:false,
|
|
||||||
has_enhanced_socket_security:false,
|
|
||||||
has_buggy_restart_scan:false,
|
|
||||||
has_mandatory_integrity_control:false,
|
|
||||||
needs_logon_sid_in_sid_list:true,
|
|
||||||
needs_count_in_si_lpres2:false,
|
|
||||||
has_recycle_dot_bin:false,
|
|
||||||
has_gaa_prefixes:false,
|
|
||||||
has_gaa_on_link_prefix:false,
|
|
||||||
supports_all_posix_ai_flags:false,
|
|
||||||
has_restricted_stack_args:false,
|
|
||||||
has_transactions:false,
|
|
||||||
ts_has_dep_problem:false,
|
|
||||||
has_recvmsg:false,
|
|
||||||
has_sendmsg:false,
|
|
||||||
has_broken_udf:false,
|
|
||||||
has_console_handle_problem:false,
|
|
||||||
has_broken_alloc_console:false,
|
|
||||||
has_always_all_codepages:false,
|
|
||||||
has_localenames:false,
|
|
||||||
has_mwmo_inputavailable:false,
|
|
||||||
has_buggy_thread_startup:false,
|
|
||||||
};
|
|
||||||
|
|
||||||
wincaps wincap_nt4sp4 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
wincaps wincap_nt4sp4 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
||||||
chunksize:0,
|
chunksize:0,
|
||||||
@ -111,7 +29,6 @@ wincaps wincap_nt4sp4 __attribute__((section (".cygwin_dll_common"), shared)) =
|
|||||||
max_sys_priv:SE_CHANGE_NOTIFY_PRIVILEGE,
|
max_sys_priv:SE_CHANGE_NOTIFY_PRIVILEGE,
|
||||||
is_server:false,
|
is_server:false,
|
||||||
has_dacl_protect:false,
|
has_dacl_protect:false,
|
||||||
has_ip_helper_lib:true,
|
|
||||||
has_broken_if_oper_status:true,
|
has_broken_if_oper_status:true,
|
||||||
has_physical_mem_access:true,
|
has_physical_mem_access:true,
|
||||||
has_process_io_counters:false,
|
has_process_io_counters:false,
|
||||||
@ -121,9 +38,7 @@ wincaps wincap_nt4sp4 __attribute__((section (".cygwin_dll_common"), shared)) =
|
|||||||
has_extended_priority_class:false,
|
has_extended_priority_class:false,
|
||||||
has_guid_volumes:false,
|
has_guid_volumes:false,
|
||||||
has_disk_ex_ioctls:false,
|
has_disk_ex_ioctls:false,
|
||||||
has_disabled_user_tos_setting:false,
|
|
||||||
has_fileid_dirinfo:false,
|
has_fileid_dirinfo:false,
|
||||||
has_exclusiveaddruse:true,
|
|
||||||
has_enhanced_socket_security:false,
|
has_enhanced_socket_security:false,
|
||||||
has_buggy_restart_scan:false,
|
has_buggy_restart_scan:false,
|
||||||
has_mandatory_integrity_control:false,
|
has_mandatory_integrity_control:false,
|
||||||
@ -153,7 +68,6 @@ wincaps wincap_2000 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
|||||||
max_sys_priv:SE_MANAGE_VOLUME_PRIVILEGE,
|
max_sys_priv:SE_MANAGE_VOLUME_PRIVILEGE,
|
||||||
is_server:false,
|
is_server:false,
|
||||||
has_dacl_protect:true,
|
has_dacl_protect:true,
|
||||||
has_ip_helper_lib:true,
|
|
||||||
has_broken_if_oper_status:false,
|
has_broken_if_oper_status:false,
|
||||||
has_physical_mem_access:true,
|
has_physical_mem_access:true,
|
||||||
has_process_io_counters:true,
|
has_process_io_counters:true,
|
||||||
@ -163,9 +77,7 @@ wincaps wincap_2000 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
|||||||
has_extended_priority_class:true,
|
has_extended_priority_class:true,
|
||||||
has_guid_volumes:true,
|
has_guid_volumes:true,
|
||||||
has_disk_ex_ioctls:false,
|
has_disk_ex_ioctls:false,
|
||||||
has_disabled_user_tos_setting:true,
|
|
||||||
has_fileid_dirinfo:true,
|
has_fileid_dirinfo:true,
|
||||||
has_exclusiveaddruse:true,
|
|
||||||
has_enhanced_socket_security:false,
|
has_enhanced_socket_security:false,
|
||||||
has_buggy_restart_scan:true,
|
has_buggy_restart_scan:true,
|
||||||
has_mandatory_integrity_control:false,
|
has_mandatory_integrity_control:false,
|
||||||
@ -195,7 +107,6 @@ wincaps wincap_2000sp4 __attribute__((section (".cygwin_dll_common"), shared)) =
|
|||||||
max_sys_priv:SE_CREATE_GLOBAL_PRIVILEGE,
|
max_sys_priv:SE_CREATE_GLOBAL_PRIVILEGE,
|
||||||
is_server:false,
|
is_server:false,
|
||||||
has_dacl_protect:true,
|
has_dacl_protect:true,
|
||||||
has_ip_helper_lib:true,
|
|
||||||
has_broken_if_oper_status:false,
|
has_broken_if_oper_status:false,
|
||||||
has_physical_mem_access:true,
|
has_physical_mem_access:true,
|
||||||
has_process_io_counters:true,
|
has_process_io_counters:true,
|
||||||
@ -205,9 +116,7 @@ wincaps wincap_2000sp4 __attribute__((section (".cygwin_dll_common"), shared)) =
|
|||||||
has_extended_priority_class:true,
|
has_extended_priority_class:true,
|
||||||
has_guid_volumes:true,
|
has_guid_volumes:true,
|
||||||
has_disk_ex_ioctls:false,
|
has_disk_ex_ioctls:false,
|
||||||
has_disabled_user_tos_setting:true,
|
|
||||||
has_fileid_dirinfo:true,
|
has_fileid_dirinfo:true,
|
||||||
has_exclusiveaddruse:true,
|
|
||||||
has_enhanced_socket_security:false,
|
has_enhanced_socket_security:false,
|
||||||
has_buggy_restart_scan:true,
|
has_buggy_restart_scan:true,
|
||||||
has_mandatory_integrity_control:false,
|
has_mandatory_integrity_control:false,
|
||||||
@ -237,7 +146,6 @@ wincaps wincap_xp __attribute__((section (".cygwin_dll_common"), shared)) = {
|
|||||||
max_sys_priv:SE_MANAGE_VOLUME_PRIVILEGE,
|
max_sys_priv:SE_MANAGE_VOLUME_PRIVILEGE,
|
||||||
is_server:false,
|
is_server:false,
|
||||||
has_dacl_protect:true,
|
has_dacl_protect:true,
|
||||||
has_ip_helper_lib:true,
|
|
||||||
has_broken_if_oper_status:false,
|
has_broken_if_oper_status:false,
|
||||||
has_physical_mem_access:true,
|
has_physical_mem_access:true,
|
||||||
has_process_io_counters:true,
|
has_process_io_counters:true,
|
||||||
@ -247,9 +155,7 @@ wincaps wincap_xp __attribute__((section (".cygwin_dll_common"), shared)) = {
|
|||||||
has_extended_priority_class:true,
|
has_extended_priority_class:true,
|
||||||
has_guid_volumes:true,
|
has_guid_volumes:true,
|
||||||
has_disk_ex_ioctls:true,
|
has_disk_ex_ioctls:true,
|
||||||
has_disabled_user_tos_setting:true,
|
|
||||||
has_fileid_dirinfo:true,
|
has_fileid_dirinfo:true,
|
||||||
has_exclusiveaddruse:true,
|
|
||||||
has_enhanced_socket_security:false,
|
has_enhanced_socket_security:false,
|
||||||
has_buggy_restart_scan:false,
|
has_buggy_restart_scan:false,
|
||||||
has_mandatory_integrity_control:false,
|
has_mandatory_integrity_control:false,
|
||||||
@ -279,7 +185,6 @@ wincaps wincap_xpsp1 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
|||||||
max_sys_priv:SE_MANAGE_VOLUME_PRIVILEGE,
|
max_sys_priv:SE_MANAGE_VOLUME_PRIVILEGE,
|
||||||
is_server:false,
|
is_server:false,
|
||||||
has_dacl_protect:true,
|
has_dacl_protect:true,
|
||||||
has_ip_helper_lib:true,
|
|
||||||
has_broken_if_oper_status:false,
|
has_broken_if_oper_status:false,
|
||||||
has_physical_mem_access:true,
|
has_physical_mem_access:true,
|
||||||
has_process_io_counters:true,
|
has_process_io_counters:true,
|
||||||
@ -289,9 +194,7 @@ wincaps wincap_xpsp1 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
|||||||
has_extended_priority_class:true,
|
has_extended_priority_class:true,
|
||||||
has_guid_volumes:true,
|
has_guid_volumes:true,
|
||||||
has_disk_ex_ioctls:true,
|
has_disk_ex_ioctls:true,
|
||||||
has_disabled_user_tos_setting:true,
|
|
||||||
has_fileid_dirinfo:true,
|
has_fileid_dirinfo:true,
|
||||||
has_exclusiveaddruse:true,
|
|
||||||
has_enhanced_socket_security:false,
|
has_enhanced_socket_security:false,
|
||||||
has_buggy_restart_scan:false,
|
has_buggy_restart_scan:false,
|
||||||
has_mandatory_integrity_control:false,
|
has_mandatory_integrity_control:false,
|
||||||
@ -321,7 +224,6 @@ wincaps wincap_xpsp2 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
|||||||
max_sys_priv:SE_CREATE_GLOBAL_PRIVILEGE,
|
max_sys_priv:SE_CREATE_GLOBAL_PRIVILEGE,
|
||||||
is_server:false,
|
is_server:false,
|
||||||
has_dacl_protect:true,
|
has_dacl_protect:true,
|
||||||
has_ip_helper_lib:true,
|
|
||||||
has_broken_if_oper_status:false,
|
has_broken_if_oper_status:false,
|
||||||
has_physical_mem_access:true,
|
has_physical_mem_access:true,
|
||||||
has_process_io_counters:true,
|
has_process_io_counters:true,
|
||||||
@ -331,9 +233,7 @@ wincaps wincap_xpsp2 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
|||||||
has_extended_priority_class:true,
|
has_extended_priority_class:true,
|
||||||
has_guid_volumes:true,
|
has_guid_volumes:true,
|
||||||
has_disk_ex_ioctls:true,
|
has_disk_ex_ioctls:true,
|
||||||
has_disabled_user_tos_setting:true,
|
|
||||||
has_fileid_dirinfo:true,
|
has_fileid_dirinfo:true,
|
||||||
has_exclusiveaddruse:true,
|
|
||||||
has_enhanced_socket_security:false,
|
has_enhanced_socket_security:false,
|
||||||
has_buggy_restart_scan:false,
|
has_buggy_restart_scan:false,
|
||||||
has_mandatory_integrity_control:false,
|
has_mandatory_integrity_control:false,
|
||||||
@ -363,7 +263,6 @@ wincaps wincap_2003 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
|||||||
max_sys_priv:SE_CREATE_GLOBAL_PRIVILEGE,
|
max_sys_priv:SE_CREATE_GLOBAL_PRIVILEGE,
|
||||||
is_server:true,
|
is_server:true,
|
||||||
has_dacl_protect:true,
|
has_dacl_protect:true,
|
||||||
has_ip_helper_lib:true,
|
|
||||||
has_broken_if_oper_status:false,
|
has_broken_if_oper_status:false,
|
||||||
has_physical_mem_access:false,
|
has_physical_mem_access:false,
|
||||||
has_process_io_counters:true,
|
has_process_io_counters:true,
|
||||||
@ -373,9 +272,7 @@ wincaps wincap_2003 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
|||||||
has_extended_priority_class:true,
|
has_extended_priority_class:true,
|
||||||
has_guid_volumes:true,
|
has_guid_volumes:true,
|
||||||
has_disk_ex_ioctls:true,
|
has_disk_ex_ioctls:true,
|
||||||
has_disabled_user_tos_setting:true,
|
|
||||||
has_fileid_dirinfo:true,
|
has_fileid_dirinfo:true,
|
||||||
has_exclusiveaddruse:true,
|
|
||||||
has_enhanced_socket_security:true,
|
has_enhanced_socket_security:true,
|
||||||
has_buggy_restart_scan:false,
|
has_buggy_restart_scan:false,
|
||||||
has_mandatory_integrity_control:false,
|
has_mandatory_integrity_control:false,
|
||||||
@ -405,7 +302,6 @@ wincaps wincap_vista __attribute__((section (".cygwin_dll_common"), shared)) = {
|
|||||||
max_sys_priv:SE_CREATE_SYMBOLIC_LINK_PRIVILEGE,
|
max_sys_priv:SE_CREATE_SYMBOLIC_LINK_PRIVILEGE,
|
||||||
is_server:false,
|
is_server:false,
|
||||||
has_dacl_protect:true,
|
has_dacl_protect:true,
|
||||||
has_ip_helper_lib:true,
|
|
||||||
has_broken_if_oper_status:false,
|
has_broken_if_oper_status:false,
|
||||||
has_physical_mem_access:false,
|
has_physical_mem_access:false,
|
||||||
has_process_io_counters:true,
|
has_process_io_counters:true,
|
||||||
@ -415,9 +311,7 @@ wincaps wincap_vista __attribute__((section (".cygwin_dll_common"), shared)) = {
|
|||||||
has_extended_priority_class:true,
|
has_extended_priority_class:true,
|
||||||
has_guid_volumes:true,
|
has_guid_volumes:true,
|
||||||
has_disk_ex_ioctls:true,
|
has_disk_ex_ioctls:true,
|
||||||
has_disabled_user_tos_setting:true,
|
|
||||||
has_fileid_dirinfo:true,
|
has_fileid_dirinfo:true,
|
||||||
has_exclusiveaddruse:true,
|
|
||||||
has_enhanced_socket_security:true,
|
has_enhanced_socket_security:true,
|
||||||
has_buggy_restart_scan:false,
|
has_buggy_restart_scan:false,
|
||||||
has_mandatory_integrity_control:true,
|
has_mandatory_integrity_control:true,
|
||||||
@ -447,7 +341,6 @@ wincaps wincap_7 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
|||||||
max_sys_priv:SE_CREATE_SYMBOLIC_LINK_PRIVILEGE,
|
max_sys_priv:SE_CREATE_SYMBOLIC_LINK_PRIVILEGE,
|
||||||
is_server:false,
|
is_server:false,
|
||||||
has_dacl_protect:true,
|
has_dacl_protect:true,
|
||||||
has_ip_helper_lib:true,
|
|
||||||
has_broken_if_oper_status:false,
|
has_broken_if_oper_status:false,
|
||||||
has_physical_mem_access:false,
|
has_physical_mem_access:false,
|
||||||
has_process_io_counters:true,
|
has_process_io_counters:true,
|
||||||
@ -457,9 +350,7 @@ wincaps wincap_7 __attribute__((section (".cygwin_dll_common"), shared)) = {
|
|||||||
has_extended_priority_class:true,
|
has_extended_priority_class:true,
|
||||||
has_guid_volumes:true,
|
has_guid_volumes:true,
|
||||||
has_disk_ex_ioctls:true,
|
has_disk_ex_ioctls:true,
|
||||||
has_disabled_user_tos_setting:true,
|
|
||||||
has_fileid_dirinfo:true,
|
has_fileid_dirinfo:true,
|
||||||
has_exclusiveaddruse:true,
|
|
||||||
has_enhanced_socket_security:true,
|
has_enhanced_socket_security:true,
|
||||||
has_buggy_restart_scan:false,
|
has_buggy_restart_scan:false,
|
||||||
has_mandatory_integrity_control:true,
|
has_mandatory_integrity_control:true,
|
||||||
@ -510,11 +401,8 @@ wincapc::init ()
|
|||||||
switch (version.dwMajorVersion)
|
switch (version.dwMajorVersion)
|
||||||
{
|
{
|
||||||
case 4:
|
case 4:
|
||||||
if (!has_osversioninfoex
|
/* No mercy. We require at least NT4 SP4. */
|
||||||
&& strcmp (version.szCSDVersion, "Service Pack 4") < 0)
|
caps = &wincap_nt4sp4;
|
||||||
caps = &wincap_nt4;
|
|
||||||
else
|
|
||||||
caps = &wincap_nt4sp4;
|
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
switch (version.dwMinorVersion)
|
switch (version.dwMinorVersion)
|
||||||
@ -555,7 +443,7 @@ wincapc::init ()
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
caps = &wincap_unknown;
|
caps = &wincap_minimal;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -565,7 +453,7 @@ wincapc::init ()
|
|||||||
api_fatal ("Windows 95/98/Me are not supported.");
|
api_fatal ("Windows 95/98/Me are not supported.");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
caps = &wincap_unknown;
|
caps = &wincap_minimal;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,6 @@ struct wincaps
|
|||||||
DWORD max_sys_priv;
|
DWORD max_sys_priv;
|
||||||
unsigned is_server : 1;
|
unsigned is_server : 1;
|
||||||
unsigned has_dacl_protect : 1;
|
unsigned has_dacl_protect : 1;
|
||||||
unsigned has_ip_helper_lib : 1;
|
|
||||||
unsigned has_broken_if_oper_status : 1;
|
unsigned has_broken_if_oper_status : 1;
|
||||||
unsigned has_physical_mem_access : 1;
|
unsigned has_physical_mem_access : 1;
|
||||||
unsigned has_process_io_counters : 1;
|
unsigned has_process_io_counters : 1;
|
||||||
@ -29,9 +28,7 @@ struct wincaps
|
|||||||
unsigned has_extended_priority_class : 1;
|
unsigned has_extended_priority_class : 1;
|
||||||
unsigned has_guid_volumes : 1;
|
unsigned has_guid_volumes : 1;
|
||||||
unsigned has_disk_ex_ioctls : 1;
|
unsigned has_disk_ex_ioctls : 1;
|
||||||
unsigned has_disabled_user_tos_setting : 1;
|
|
||||||
unsigned has_fileid_dirinfo : 1;
|
unsigned has_fileid_dirinfo : 1;
|
||||||
unsigned has_exclusiveaddruse : 1;
|
|
||||||
unsigned has_enhanced_socket_security : 1;
|
unsigned has_enhanced_socket_security : 1;
|
||||||
unsigned has_buggy_restart_scan : 1;
|
unsigned has_buggy_restart_scan : 1;
|
||||||
unsigned has_mandatory_integrity_control : 1;
|
unsigned has_mandatory_integrity_control : 1;
|
||||||
@ -77,7 +74,6 @@ public:
|
|||||||
DWORD IMPLEMENT (max_sys_priv)
|
DWORD IMPLEMENT (max_sys_priv)
|
||||||
bool IMPLEMENT (is_server)
|
bool IMPLEMENT (is_server)
|
||||||
bool IMPLEMENT (has_dacl_protect)
|
bool IMPLEMENT (has_dacl_protect)
|
||||||
bool IMPLEMENT (has_ip_helper_lib)
|
|
||||||
bool IMPLEMENT (has_broken_if_oper_status)
|
bool IMPLEMENT (has_broken_if_oper_status)
|
||||||
bool IMPLEMENT (has_physical_mem_access)
|
bool IMPLEMENT (has_physical_mem_access)
|
||||||
bool IMPLEMENT (has_process_io_counters)
|
bool IMPLEMENT (has_process_io_counters)
|
||||||
@ -87,9 +83,7 @@ public:
|
|||||||
bool IMPLEMENT (has_extended_priority_class)
|
bool IMPLEMENT (has_extended_priority_class)
|
||||||
bool IMPLEMENT (has_guid_volumes)
|
bool IMPLEMENT (has_guid_volumes)
|
||||||
bool IMPLEMENT (has_disk_ex_ioctls)
|
bool IMPLEMENT (has_disk_ex_ioctls)
|
||||||
bool IMPLEMENT (has_disabled_user_tos_setting)
|
|
||||||
bool IMPLEMENT (has_fileid_dirinfo)
|
bool IMPLEMENT (has_fileid_dirinfo)
|
||||||
bool IMPLEMENT (has_exclusiveaddruse)
|
|
||||||
bool IMPLEMENT (has_enhanced_socket_security)
|
bool IMPLEMENT (has_enhanced_socket_security)
|
||||||
bool IMPLEMENT (has_buggy_restart_scan)
|
bool IMPLEMENT (has_buggy_restart_scan)
|
||||||
bool IMPLEMENT (has_mandatory_integrity_control)
|
bool IMPLEMENT (has_mandatory_integrity_control)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user