[Win32utils-devel] Yet another data structure + pack/unpack question (win32-service)

Daniel Berger djberg96 at gmail.com
Wed Jun 21 01:06:49 EDT 2006


Hi all,

If you take a look at the service.rb file in the win32-service 
repository (the new one in the toplevel repository path), I've got this 
bit of code, which succeeds, but I can't seem to unpack the data 
structure properly.  Did I pack it wrong to begin with?  I should know 
this but I'm spacing out.

proc_status       = [0,0,0,0,0,0,0,0,0,0].pack('LLLLLLLLLL')
enum_service      = [0.chr, 0.chr].pack('pp') + proc_status
service_buf       = enum_service * 1000
bytes_needed      = [0].pack('L')
services_returned = [0].pack('L')
resume_handle     = [0].pack('L')

bool = EnumServicesStatusEx(
   handle_scm,
   SC_ENUM_PROCESS_INFO,
   SERVICE_WIN32 | SERVICE_DRIVER,
   SERVICE_STATE_ALL,
   service_buf,
   service_buf.size,
   bytes_needed,
   services_returned,
   resume_handle,
   group
)

if bool
   num_services = services_returned.unpack('L').first
   index = 0

   1.upto(num_services){ |num|
      info = service_buf[index, enum_service.size-1]
      service_name = info[0,4].pack('p') # boom!
      index += enum_service.size
   }
end

Regards,

Dan


More information about the win32utils-devel mailing list