Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re^5: Win32::API::Struct: Pointers of Pointers

by BrowserUk (Patriarch)
on Jun 29, 2006 at 13:59 UTC ( #558318=note: print w/replies, xml ) Need Help??


in reply to Re^4: Win32::API::Struct: Pointers of Pointers
in thread Win32::API::Struct: Pointers of Pointers

I'm getting much the same results. No errors, just nothing returned in the buffer :(

I'm using the C source code from here as a reference. Maybe it will give you some clues I'm not seeing?

I'll update if I have any success.


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
  • Comment on Re^5: Win32::API::Struct: Pointers of Pointers

Replies are listed 'Best First'.
Re^6: Win32::API::Struct: Pointers of Pointers
by esskar (Deacon) on Jun 29, 2006 at 15:26 UTC
    that's what i mean. it is a pointer of a pointer. The function alloactes the needed memory itself. here is the prove
    sub query_users { my ( $self, $filename ) = @_; my $func = import_api( 'advapi32', 'QueryUsersOnEncryptedFile', 'P +P', 'N' ); die "Could not import API QueryUsersOnEncryptedFile: $!" unless defined $func; $filename = make_unicode( File::Spec->canonpath($filename) ); + my $ptr = " " x 4; # 4 == sizeof(void*) my $result = $func->Call( "$filename", $ptr ); print "result: $result\n"; return undef if $result; my $address = unpack( "L*", $ptr ); printf("0x%08x\n", $address); }
    i think i have to switch to XS at this point.

      In theory, this should work...but it doesn't.

      #! perl -slw use strict; use Encode; use Devel::Peek; use Win32::API::Prototype; ApiLink( 'advapi32', q[ DWORD QueryUsersOnEncryptedFile( LPCWSTR lpFileName, ULONG pUsers ) ]) or die $^E; my $buffer = chr(0) x 4; print Dump( $buffer ); my $pointer = unpack 'L!', pack 'P', $buffer; printf "%08x\n", $pointer; my $uFile = encode( 'UTF-16LE', $_ = $ARGV[ 0 ], 1 ); print $uFile; QueryUsersOnEncryptedFile( $uFile, $pointer ) or die "$! : $^E"; print Dump( \$buffer ); print unpack 'C*',$buffer;

      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://558318]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (5)
As of 2023-02-04 18:48 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    I prefer not to run the latest version of Perl because:







    Results (31 votes). Check out past polls.

    Notices?