[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