def run(self): while self.do_run: flags = FILE_FLAG_WRITE_THROUGH if self.message: pipe_handle = KERNEL32.CreateNamedPipeW( self.pipe_name, PIPE_ACCESS_DUPLEX | flags, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, BUFSIZE, BUFSIZE, 0, None) else: pipe_handle = KERNEL32.CreateNamedPipeW( self.pipe_name, PIPE_ACCESS_INBOUND | flags, PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, 0, BUFSIZE, 0, None) if pipe_handle == INVALID_HANDLE_VALUE: log.warning("Error opening logging pipe server.") continue if KERNEL32.ConnectNamedPipe(pipe_handle, None) or \ KERNEL32.GetLastError() == ERROR_PIPE_CONNECTED: handler = self.pipe_handler(pipe_handle, **self.kwargs) handler.daemon = True handler.start() self.handlers.add(handler) else: KERNEL32.CloseHandle(pipe_handle)
def run(self): while self.do_run: # Create the Named Pipe. sd = SECURITY_DESCRIPTOR() sa = SECURITY_ATTRIBUTES() ADVAPI32.InitializeSecurityDescriptor(byref(sd), 1) ADVAPI32.SetSecurityDescriptorDacl(byref(sd), True, None, False) sa.nLength = sizeof(SECURITY_ATTRIBUTES) sa.bInheritHandle = False sa.lpSecurityDescriptor = addressof(sd) # flags = FILE_FLAG_WRITE_THROUGH if self.message: pipe_handle = KERNEL32.CreateNamedPipeW( self.pipe_name, PIPE_ACCESS_DUPLEX, # | flags, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, BUFSIZE, BUFSIZE, 0, byref(sa), # None, ) else: pipe_handle = KERNEL32.CreateNamedPipeW( self.pipe_name, PIPE_ACCESS_INBOUND, # | flags, PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, 0, BUFSIZE, 0, byref(sa), # None, ) if pipe_handle == INVALID_HANDLE_VALUE: log.warning("Error opening logging pipe server") continue if KERNEL32.ConnectNamedPipe( pipe_handle, None) or KERNEL32.GetLastError() == ERROR_PIPE_CONNECTED: handler = self.pipe_handler(pipe_handle, **self.kwargs) handler.daemon = True handler.start() self.handlers.add(handler) else: KERNEL32.CloseHandle(pipe_handle)
def __init__(self, result_ip, result_port, logserver_path): # Create the Named Pipe. sd = SECURITY_DESCRIPTOR() sa = SECURITY_ATTRIBUTES() ADVAPI32.InitializeSecurityDescriptor(byref(sd), 1) ADVAPI32.SetSecurityDescriptorDacl(byref(sd), True, None, False) sa.nLength = sizeof(SECURITY_ATTRIBUTES) sa.bInheritHandle = False sa.lpSecurityDescriptor = addressof(sd) h_pipe = KERNEL32.CreateNamedPipeW( logserver_path, PIPE_ACCESS_INBOUND, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, BUFSIZE, LOGBUFSIZE, 0, byref(sa), ) if h_pipe == INVALID_HANDLE_VALUE: log.warning("Unable to create log server pipe") return False logserver = LogServerThread(h_pipe, result_ip, result_port) logserver.daemon = True logserver.start()