/*********************************************************************** * GetComputerNameExW (KERNEL32.@) */ BOOL WINAPI GetComputerNameExW( COMPUTER_NAME_FORMAT type, LPWSTR name, LPDWORD size ) { char buf[256]; int len = sizeof(buf) - 1, ret; TRACE("%d, %p, %p\n", type, name, size); switch( type ) { case ComputerNameNetBIOS: case ComputerNamePhysicalNetBIOS: ret = GetComputerNameW (name, size); if (!ret && GetLastError() == ERROR_BUFFER_OVERFLOW) SetLastError( ERROR_MORE_DATA ); return ret; case ComputerNameDnsHostname: case ComputerNamePhysicalDnsHostname: ret = dns_hostname (buf, &len); break; case ComputerNameDnsDomain: case ComputerNamePhysicalDnsDomain: ret = dns_domainname (buf, &len); break; case ComputerNameDnsFullyQualified: case ComputerNamePhysicalDnsFullyQualified: ret = dns_fqdn (buf, &len); break; default: SetLastError (ERROR_INVALID_PARAMETER); return FALSE; } if ( ret ) { unsigned int lenW; TRACE ("-> %s (%d)\n", debugstr_a (buf), len); lenW = MultiByteToWideChar( CP_ACP, 0, buf, len, NULL, 0 ); if ( *size < lenW + 1 ) { *size = lenW + 1; SetLastError( ERROR_MORE_DATA ); ret = FALSE; } else { MultiByteToWideChar( CP_ACP, 0, buf, len, name, lenW ); name[lenW] = 0; *size = lenW; ret = TRUE; } } return ret; }
/*********************************************************************** * dns_hostname (INTERNAL) */ static BOOL dns_hostname ( char *name, int *size ) { char *c; if ( ! dns_fqdn ( name, size ) ) return FALSE; c = strchr ( name, '.' ); if (c) { *c = 0; *size = (c - name); } return TRUE; }
/*********************************************************************** * dns_domainname (INTERNAL) */ static BOOL dns_domainname ( char *name, int *size ) { char *c; if ( ! dns_fqdn ( name, size ) ) return FALSE; c = strchr ( name, '.' ); if (c) { c += 1; *size -= (c - name); memmove ( name, c, *size + 1 ); } return TRUE; }
/*********************************************************************** * GetComputerNameExA (KERNEL32.@) */ BOOL WINAPI GetComputerNameExA(COMPUTER_NAME_FORMAT type, LPSTR name, LPDWORD size) { char buf[256]; int len = sizeof(buf) - 1, ret; TRACE("%d, %p, %p\n", type, name, size); switch( type ) { case ComputerNameNetBIOS: case ComputerNamePhysicalNetBIOS: return GetComputerNameA (name, size); case ComputerNameDnsHostname: case ComputerNamePhysicalDnsHostname: ret = dns_hostname (buf, &len); break; case ComputerNameDnsDomain: case ComputerNamePhysicalDnsDomain: ret = dns_domainname (buf, &len); break; case ComputerNameDnsFullyQualified: case ComputerNamePhysicalDnsFullyQualified: ret = dns_fqdn (buf, &len); break; default: SetLastError (ERROR_INVALID_PARAMETER); return FALSE; } if ( ret ) { TRACE ("-> %s (%d)\n", debugstr_a (buf), len); if ( *size < len + 1 ) { *size = len + 1; SetLastError( ERROR_MORE_DATA ); ret = FALSE; } else { memcpy( name, buf, len ); name[len] = 0; *size = len; ret = TRUE; } } return ret; }