The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

use strict;

use Win32API::File qw(
    QueryDosDevice
    fileLastError
);

exit main();


sub main {
    my $size= 1024;
    my $all;
    while(  ! QueryDosDevice( [], $all, $size )  ) {
	$size *= 2;
    }
    my @all= split /\0/, $all;
    my %all;
    for(  @all  ) {
	if(  ! QueryDosDevice( $_, $all, 0 )  ) {
	    print "Can't get device definition ($_): ", fileLastError(), "\n";
	} else {
	    $all =~ s/\0\0.*//;	# Audio devices return some strange items?
	    my @list= split /\0/, $all;
	    $all{$_}= \@list;
	}
    }
    for(  sort { $all{$a}->[0] cmp $all{$b}->[0] } keys %all  ) {
	print "$_ = ", join( ", ", @{$all{$_}} ), "\n";
    }
    return 0;
}