📄 aereg.cpp
字号:
}else{
throwException( env, "readValue", "type mismach" );
}
}else{
throwException( env, "readStringValue", "RegQueryValueEx failed" );
}
RegCloseKey(subkey);
}else{
throwException( env, "readStringValue", "RegOpenKey failed" );
}
return(result);
}
JNIEXPORT void JNICALL
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_writeWordValueA(
JNIEnv *env,
jclass cla,
jint _type,
jstring _subkey_name,
jstring _value_name,
jint _value_value )
{
HKEY key;
HKEY subkey;
char subkey_name[1024];
char value_name[1024];
DWORD value_value = _value_value;
key = mapHKEY( env, _type );
if ( key == NULL ){
return;
}
if ( !jstringToCharsA( env, _subkey_name, subkey_name, sizeof( subkey_name ))){
return;
}
if ( !jstringToCharsA( env, _value_name, value_name, sizeof( value_name ))){
return;
}
if ( RegCreateKeyExA( key, subkey_name, 0, REG_NONE, 0, KEY_ALL_ACCESS, NULL, &subkey, NULL ) == ERROR_SUCCESS ){
if ( RegSetValueExA( subkey, value_name, 0, REG_DWORD, (const BYTE*)&value_value, sizeof(DWORD)) == ERROR_SUCCESS){
}else{
throwException( env, "writeWordValue", "RegSetValueEx failed" );
}
RegCloseKey(subkey);
}else{
throwException( env, "writeWordValue", "RegCreateKeyEx failed" );
}
}
JNIEXPORT void JNICALL
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_writeStringValueA(
JNIEnv *env,
jclass cla,
jint _type,
jstring _subkey_name,
jstring _value_name,
jstring _value_value )
{
HKEY key;
HKEY subkey;
char subkey_name[1024];
char value_name[1024];
char value_value[1024];
key = mapHKEY( env, _type );
if ( key == NULL ){
return;
}
if ( !jstringToCharsA( env, _subkey_name, subkey_name, sizeof( subkey_name ))){
return;
}
if ( !jstringToCharsA( env, _value_name, value_name, sizeof( value_name ))){
return;
}
if ( !jstringToCharsA( env, _value_value, value_value, sizeof( value_value ))){
return;
}
if ( RegCreateKeyExA( key, subkey_name, 0, REG_NONE, 0, KEY_ALL_ACCESS, NULL, &subkey, NULL ) == ERROR_SUCCESS ){
if ( RegSetValueExA( subkey, value_name, 0, REG_SZ, (const BYTE*)value_value, strlen(value_value)+1 ) == ERROR_SUCCESS){
}else{
throwException( env, "writeStringValue", "RegSetValueEx failed" );
}
RegCloseKey(subkey);
}else{
throwException( env, "writeStringValue", "RegCreateKeyEx failed" );
}
}
JNIEXPORT void JNICALL
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_deleteKeyA(
JNIEnv *env,
jclass cla,
jint _type,
jstring _subkey_name,
jboolean _recursive )
{
HKEY key;
HKEY subkey;
char subkey_name[1024];
jstring result = NULL;
key = mapHKEY( env, _type );
if ( key == NULL ){
return;
}
if ( !jstringToCharsA( env, _subkey_name, subkey_name, sizeof( subkey_name ))){
return;
}
if ( RegOpenKeyA( key, subkey_name, &subkey ) == ERROR_SUCCESS ){
RegCloseKey(subkey);
if ( _recursive ){
if ( SHDeleteKeyA( key, subkey_name ) != ERROR_SUCCESS ){
throwException( env, "deleteKey", "SHDeleteKey failed" );
}
}else{
if ( RegDeleteKeyA( key, subkey_name ) != ERROR_SUCCESS ){
throwException( env, "deleteKey", "RegDeleteKey failed" );
}
}
}
}
JNIEXPORT void JNICALL
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_deleteValueA(
JNIEnv *env,
jclass cla,
jint _type,
jstring _subkey_name,
jstring _value_name )
{
HKEY key;
HKEY subkey;
char subkey_name[1024];
char value_name[1024];
jstring result = NULL;
key = mapHKEY( env, _type );
if ( key == NULL ){
return;
}
if ( !jstringToCharsA( env, _subkey_name, subkey_name, sizeof( subkey_name ))){
return;
}
if ( !jstringToCharsA( env, _value_name, value_name, sizeof( value_name ))){
return;
}
if ( RegOpenKeyA( key, subkey_name, &subkey ) == ERROR_SUCCESS ){
RegCloseKey(subkey);
if ( SHDeleteValueA( key, subkey_name, value_name ) != ERROR_SUCCESS ){
throwException( env, "deleteValue", "SHDeleteValue failed" );
}
}
}
JNIEXPORT void JNICALL
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_createProcessA(
JNIEnv* env,
jclass cla,
jstring _command_line,
jboolean _inherit_handles )
{
char command_line[16000];
STARTUPINFOA start_info;
PROCESS_INFORMATION proc_info;
if ( !jstringToCharsA( env, _command_line, command_line, sizeof( command_line ))){
return;
}
memset( &start_info, 0, sizeof( STARTUPINFOA ));
start_info.cb = sizeof( STARTUPINFOA );
if ( CreateProcessA(
NULL, // LPCTSTR lpApplicationName,
command_line, // LPTSTR lpCommandLine,
NULL, // LPSECURITY_ATTRIBUTES lpProcessAttributes,
NULL, // LPSECURITY_ATTRIBUTES lpThreadAttributes,
_inherit_handles, // BOOL bInheritHandles,
DETACHED_PROCESS, // DWORD dwCreationFlags,
NULL, // LPVOID lpEnvironment,
NULL, // LPCTSTR lpCurrentDirectory,
&start_info, // LPSTARTUPINFO lpStartupInfo,
&proc_info )){ // LPPROCESS_INFORMATION lpProcessInformation
CloseHandle( proc_info.hThread );
CloseHandle( proc_info.hProcess );
}else{
throwException( env, "createProcess", "CreateProcess failed" );
}
};
JNIEXPORT void JNICALL
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_moveToRecycleBinA(
JNIEnv *env,
jclass cla,
jstring _fileName )
{
char file_name[16000];
SHFILEOPSTRUCTA opFile;
if ( !jstringToCharsA( env, _fileName, file_name, sizeof( file_name )-1)){
return;
}
HANDLE file = CreateFileA ( file_name,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL );
// Checks if file exists
if ( file == INVALID_HANDLE_VALUE ){
throwException( env, "moveToRecycleBin", "file not found" );
return;
}
CloseHandle(file);
file_name[ strlen(file_name)+1 ] = 0;
ZeroMemory(&opFile, sizeof(opFile));
opFile.wFunc = FO_DELETE;
opFile.pFrom = file_name;
opFile.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION | FOF_SILENT;
if (SHFileOperationA (&opFile)){
throwException( env, "moveToRecycleBin", "SHFileOperation failed" );
}
}
JNIEXPORT void JNICALL
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_copyPermissionA(
JNIEnv *env,
jclass cla,
jstring _fileNameIn,
jstring _fileNameOut )
{
char file_name_in[2048];
char file_name_out[2048];
if ( !jstringToCharsA( env, _fileNameIn, file_name_in, sizeof( file_name_in )-1)){
return;
}
if ( !jstringToCharsA( env, _fileNameOut, file_name_out, sizeof( file_name_out )-1)){
return;
}
SECURITY_INFORMATION secInfo = DACL_SECURITY_INFORMATION;
DWORD cbFileSD = 0;
PSECURITY_DESCRIPTOR pFileSD = NULL;
BOOL ok = GetFileSecurityA(file_name_in, secInfo, pFileSD, 0, &cbFileSD);
// API should have failed with insufficient buffer.
if ( ok ){
throwException( env, "copyPermission", "GetFileSecurity ok" );
return;
}else if (GetLastError() == ERROR_FILE_NOT_FOUND) {
throwException( env, "copyPermission", "from file not found" );
return;
}else if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
throwException( env, "copyPermission", "GetFileSecurity unexpected response", GetLastError() );
return;
}else{
pFileSD = myheapalloc( cbFileSD );
if (!pFileSD) {
throwException( env, "copyPermission", "no memory" );
return;
}
ok = GetFileSecurityA(file_name_in, secInfo, pFileSD, cbFileSD, &cbFileSD );
if (!ok) {
myheapfree( pFileSD );
throwException( env, "copyPermission", "GetFileSecurity", GetLastError());
return;
}
ok = SetFileSecurityA( file_name_out, secInfo, pFileSD );
myheapfree( pFileSD );
if ( !ok ){
if (GetLastError() == ERROR_FILE_NOT_FOUND) {
throwException( env, "copyPermission", "to file not found" );
}else{
throwException( env, "copyPermission", "SetFileSecurity unexpected response", GetLastError() );
}
}
}
}
JNIEXPORT jboolean JNICALL
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_testNativeAvailabilityA(
JNIEnv *env,
jclass cla,
jstring _name )
{
char name[2048];
if ( !jstringToCharsA( env, _name, name, sizeof( name )-1)){
return( 0 );
}
HMODULE mod =
LoadLibraryExA(
name,
NULL,
LOAD_LIBRARY_AS_DATAFILE );
if ( mod == NULL ){
return( 0 );
}else{
FreeLibrary( mod );
return( 1 );
}
}
// BLAH
JNIEXPORT jstring JNICALL
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_getModuleName(
JNIEnv *env,
jclass cla )
{
if ( non_unicode ){
return( Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_getModuleNameA( env, cla ));
}else{
return( Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_getModuleNameW( env, cla ));
}
}
JNIEXPORT jstring JNICALL
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_getVersion(
JNIEnv *env,
jclass cla )
{
if ( non_unicode ){
return( Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_getVersionA( env, cla ));
}else{
return( Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_getVersionW( env, cla ));
}
}
JNIEXPORT jstring JNICALL
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_readStringValue(
JNIEnv *env,
jclass cla,
jint _type,
jstring _subkey_name,
jstring _value_name )
{
if ( non_unicode ){
return( Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_readStringValueA( env, cla, _type, _subkey_name, _value_name ));
}else{
return( Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_readStringValueW( env, cla, _type, _subkey_name, _value_name ));
}
}
JNIEXPORT jint JNICALL
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_readWordValue(
JNIEnv *env,
jclass cla,
jint _type,
jstring _subkey_name,
jstring _value_name )
{
if ( non_unicode ){
return( Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_readWordValueA( env, cla, _type, _subkey_name, _value_name ));
}else{
return( Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_readWordValueW( env, cla, _type, _subkey_name, _value_name ));
}
}
JNIEXPORT void JNICALL
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_writeStringValue(
JNIEnv *env,
jclass cla,
jint _type,
jstring _subkey_name,
jstring _value_name,
jstring _value_value )
{
if ( non_unicode ){
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_writeStringValueA( env, cla, _type, _subkey_name, _value_name, _value_value );
}else{
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_writeStringValueW( env, cla, _type, _subkey_name, _value_name, _value_value );
}
}
JNIEXPORT void JNICALL
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_writeWordValue(
JNIEnv *env,
jclass cla,
jint _type,
jstring _subkey_name,
jstring _value_name,
jint _value_value )
{
if ( non_unicode ){
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_writeWordValueA( env, cla, _type, _subkey_name, _value_name, _value_value );
}else{
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_writeWordValueW( env, cla, _type, _subkey_name, _value_name, _value_value );
}
}
JNIEXPORT void JNICALL
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_deleteKey(
JNIEnv *env,
jclass cla,
jint _type,
jstring _subkey_name,
jboolean _recursive )
{
if ( non_unicode ){
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_deleteKeyA( env, cla, _type, _subkey_name, _recursive );
}else{
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_deleteKeyW( env, cla, _type, _subkey_name, _recursive );
}
}
JNIEXPORT void JNICALL
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_deleteValue(
JNIEnv *env,
jclass cla,
jint _type,
jstring _subkey_name,
jstring _value_name )
{
if ( non_unicode ){
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_deleteValueA( env, cla, _type, _subkey_name, _value_name );
}else{
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_deleteValueW( env, cla, _type, _subkey_name, _value_name );
}
}
JNIEXPORT void JNICALL
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_createProcess(
JNIEnv* env,
jclass cla,
jstring _command_line,
jboolean _inherit_handles )
{
if ( non_unicode ){
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_createProcessA( env, cla, _command_line, _inherit_handles );
}else{
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_createProcessW( env, cla, _command_line, _inherit_handles );
}
}
JNIEXPORT void JNICALL
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_moveToRecycleBin(
JNIEnv* env,
jclass cla,
jstring _file_name )
{
if ( non_unicode ){
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_moveToRecycleBinA( env, cla, _file_name );
}else{
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_moveToRecycleBinW( env, cla, _file_name );
}
}
JNIEXPORT void JNICALL
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_copyPermission(
JNIEnv *env,
jclass cla,
jstring _fileNameIn,
jstring _fileNameOut )
{
if ( non_unicode ){
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_copyPermissionA( env, cla, _fileNameIn, _fileNameOut );
}else{
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_copyPermissionW( env, cla, _fileNameIn, _fileNameOut );
}
}
JNIEXPORT jboolean JNICALL
Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_testNativeAvailability(
JNIEnv *env,
jclass cla,
jstring name )
{
if ( non_unicode ){
return( Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_testNativeAvailabilityA( env, cla,name ));
}else{
return( Java_org_gudy_azureus2_platform_win32_access_impl_AEWin32AccessInterface_testNativeAvailabilityW( env, cla, name ));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -