std::wstring ConvStr::GetWstr( std::string ansi ) { std::vector<wchar_t> unicode; unicode.resize(ansi.length()+1); CharToWchar(&unicode[0], &ansi[0]); return std::wstring(&unicode[0]); }
void LogMessageWindow::log(const char* fmt,...) { char buf[MAX_LINE_CHR+1]; va_list lst; va_start(lst, fmt); int size = printfprintf(buf, MAX_LINE_CHR, fmt, lst); va_end(lst); m_log.append(Ogre::UTFString(CharToWchar(buf))); m_log.append("\n"); if(m_log.length()>MAX_LOG_LENGTH) { m_log = m_log.substr(m_log.length()-MAX_LOG_LENGTH); } trimDisplayArea(buf); Ogre::TextAreaOverlayElement* textArea = static_cast<Ogre::TextAreaOverlayElement*>(m_textarea); textArea->setCaption(m_displaylog); gkPrintf( "(log panel)%s\n", buf); if(m_console ) { m_console->addToConsole(m_console->getColorString("System"), "", MyGUI::UString(CharToWchar(buf))); } }
void LogMessageWindow::trimDisplayArea(const char* aMsg) { m_displaylog.append(Ogre::UTFString(CharToWchar(aMsg))); m_displaylog.append("\n"); Ogre::StringVector v = Ogre::StringUtil::split(m_displaylog,"\n"); while(v.size()>m_displaylinenum) { v.erase(v.begin()); m_displaylog.clear(); for (Ogre::StringVector::iterator i = v.begin(); i != v.end(); ++i) { m_displaylog.append(i->c_str()); m_displaylog.append("\n"); } v = Ogre::StringUtil::split(m_displaylog,"\n"); } }
bool COrPSFDlg::Login(char* command) { BOOL bRet; char buf[1024]; wchar_t comd[256]; DWORD readsize; CharToWchar( command, comd, sizeof(comd) ); // psftp thread start bRet = CreateProcessW( L"psftp.dat", comd, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, // CREATE_NO_WINDOW,CREATE_NEW_CONSOLE NULL, NULL, &m_si, &m_pi ); if( bRet == 0 ){ DWORD err = ::GetLastError(); return ( false ); } bRet = ReadFile( m_hPsftpStdOutR, buf, sizeof(buf), &readsize, NULL ); // ReadFile error if( bRet == 0 ){ return ( false ); } // login error if( strstr( buf, "Remote working directory is" ) == NULL ){ return ( false ); } return ( true ); }
NTSTATUS LklMount(IN PDEVICE_OBJECT dev,IN PVPB vpb) { NTSTATUS status = STATUS_SUCCESS; PDEVICE_OBJECT volume_device=NULL; PLKLVCB vcb = NULL; LARGE_INTEGER AllocationSize; ULONG ioctlSize; int sectors; PSTR dev_name; STATFS my_stat; ULONG rc; CHECK_OUT(dev == lklfsd.device, STATUS_INVALID_DEVICE_REQUEST); CHECK_OUT(FLAG_ON(lklfsd.flags, VFS_UNLOAD_PENDING),STATUS_UNRECOGNIZED_VOLUME); DbgPrint("Mount volume"); status = IoCreateDevice(lklfsd.driver, sizeof(LKLVCB), NULL, FILE_DEVICE_DISK_FILE_SYSTEM, 0, FALSE, &volume_device); CHECK_OUT(!NT_SUCCESS(status), status); if (dev->AlignmentRequirement > volume_device->AlignmentRequirement) volume_device->AlignmentRequirement = dev->AlignmentRequirement; CLEAR_FLAG(volume_device->Flags, DO_DEVICE_INITIALIZING); volume_device->StackSize = (CCHAR)(dev->StackSize+1); CreateVcb(volume_device,dev,vpb,&AllocationSize); vcb = (PLKLVCB) volume_device->DeviceExtension; if(!FLAG_ON(vcb->flags, VFS_VCB_FLAGS_VCB_INITIALIZED)) TRY_RETURN(STATUS_INSUFFICIENT_RESOURCES); // yup, here we read the disk geometry ioctlSize = sizeof(DISK_GEOMETRY); status = BlockDeviceIoControl(dev, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL, 0, &vcb->disk_geometry, &ioctlSize); CHECK_OUT(!NT_SUCCESS(status), status); ioctlSize = sizeof(PARTITION_INFORMATION); status = BlockDeviceIoControl(dev, IOCTL_DISK_GET_PARTITION_INFO, NULL, 0, &vcb->partition_information, &ioctlSize); CHECK_OUT(!NT_SUCCESS(status), status); int bytes_per_sector = 0; switch (vcb->disk_geometry.BytesPerSector) { case 256: bytes_per_sector = 8; break; case 512: bytes_per_sector = 9; break; case 1024: bytes_per_sector = 10; break; case 2048: bytes_per_sector = 11; break; case 4096: bytes_per_sector = 12; break; case 8192: bytes_per_sector = 13; break; } sectors = vcb->partition_information.PartitionLength.QuadPart >> bytes_per_sector; // try a linux mount if this fails, then we fail to mount // the volume ExAcquireResourceExclusiveLite(&(lklfsd.global_resource), TRUE); lklfsd.no_mounts++; status = sys_mount_wrapper(vcb->target_device, sectors, &vcb->linux_device); DbgPrint("Mounting device '%s' retstatus=%d", dev_name, status); ExFreePool(dev_name); RELEASE(&(lklfsd.global_resource)); CHECK_OUT(!NT_SUCCESS(status), status); //get info about the successfully mounted volume rc = sys_statfs_wrapper(vcb->linux_device.mnt, &my_stat); vpb->DeviceObject = volume_device; // complete vpb fields #define UNKNOWN_LABEL "Local Disk" CharToWchar(vpb->VolumeLabel, UNKNOWN_LABEL , sizeof(UNKNOWN_LABEL)); vpb->VolumeLabel[sizeof(UNKNOWN_LABEL)] = 0; vpb->VolumeLabelLength = sizeof(UNKNOWN_LABEL)*2; vpb->SerialNumber = my_stat.f_type; try_exit: if(!NT_SUCCESS(status)) { ExAcquireResourceExclusiveLite(&(lklfsd.global_resource), TRUE); lklfsd.no_mounts--; RELEASE(&(lklfsd.global_resource)); if(volume_device) { FreeVcb((PLKLVCB) volume_device->DeviceExtension); IoDeleteDevice(volume_device); } } return status; }
wchar_t* CDataConverter::StringToWchar(const string& s) { const char* p=s.c_str(); return CharToWchar(p); }