diff options
Diffstat (limited to 'find_lock')
-rw-r--r-- | find_lock/.gitignore | 3 | ||||
-rw-r--r-- | find_lock/NOTICE | 190 | ||||
-rwxr-xr-x | find_lock/find_lock.cpp | 778 | ||||
-rwxr-xr-x | find_lock/find_lock.exe.manifest | 33 | ||||
-rwxr-xr-x | find_lock/find_lock.h | 25 | ||||
-rwxr-xr-x | find_lock/find_lock_exe.cpp | 80 | ||||
-rw-r--r-- | find_lock/find_lock_exe.vcxproj | 168 | ||||
-rw-r--r-- | find_lock/find_lock_exe.vcxproj.filters | 36 | ||||
-rw-r--r-- | find_lock/images/android_icon.ico | bin | 300318 -> 0 bytes | |||
-rw-r--r-- | find_lock/images/android_icon.rc | 2 |
10 files changed, 0 insertions, 1315 deletions
diff --git a/find_lock/.gitignore b/find_lock/.gitignore deleted file mode 100644 index 91e18b154..000000000 --- a/find_lock/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -images/find_lock_icon.o -*.suo -*.user diff --git a/find_lock/NOTICE b/find_lock/NOTICE deleted file mode 100644 index 7317ae2a7..000000000 --- a/find_lock/NOTICE +++ /dev/null @@ -1,190 +0,0 @@ - - Copyright (c) 2005-2011, The Android Open Source Project - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - diff --git a/find_lock/find_lock.cpp b/find_lock/find_lock.cpp deleted file mode 100755 index bbbba816a..000000000 --- a/find_lock/find_lock.cpp +++ /dev/null @@ -1,778 +0,0 @@ -/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * "find_lock.exe", for Windows only.
- *
- * References used:
- *
- * http://drdobbs.com/windows/184411099
- * article by Sven B. Schreiber, November 01, 1999
- *
- * http://www.codeguru.com/Cpp/W-P/system/processesmodules/article.php/c2827/
- * by Zoltan Csizmadia, November 14, 2000
- *
- * http://stackoverflow.com/questions/860656/
- * (same technique, but written in unsafe C#)
- *
- * Starting with Vista, we can also use the Restart Manager API as
- * explained here: (TODO for next version)
- * http://msdn.microsoft.com/en-us/magazine/cc163450.aspx
- */
-
-#ifdef _WIN32
-
-#include "utils.h"
-#include <ctype.h>
-#include <fcntl.h>
-#include <io.h>
-#include <process.h>
-
-
-// NtDll structures from the the Dr Dobbs article, adjusted for our needs:
-
-typedef void *POBJECT;
-typedef LONG KPRIORITY;
-typedef LARGE_INTEGER QWORD;
-
-typedef struct {
- WORD Length;
- WORD MaximumLength;
- PWORD Buffer;
-} UNICODE_STRING;
-
-typedef struct {
- DWORD dIdProcess;
- BYTE bObjectType; // OB_TYPE_*
- BYTE bFlags; // bits 0..2 HANDLE_FLAG_*
- WORD wValue; // multiple of 4
- POBJECT pObject;
- ACCESS_MASK GrantedAccess;
-} SYSTEM_HANDLE;
-
-typedef struct {
- DWORD dCount;
- SYSTEM_HANDLE ash[1];
-} SYSTEM_HANDLE_INFORMATION;
-
-typedef struct {
- DWORD PeakVirtualSize;
- DWORD VirtualSize;
- DWORD PageFaultCount;
- DWORD PeakWorkingSetSize;
- DWORD WorkingSetSize;
- DWORD QuotaPeakPagedPoolUsage;
- DWORD QuotaPagedPoolUsage;
- DWORD QuotaPeakNonPagedPoolUsage;
- DWORD QuotaNonPagedPoolUsage;
- DWORD PagefileUsage;
- DWORD PeakPagefileUsage;
-} VM_COUNTERS;
-
-typedef struct {
- HANDLE UniqueProcess;
- HANDLE UniqueThread;
-} CLIENT_ID;
-
-typedef enum {
- // Ignored. We don't actually use these values.
- Unused
-} KWAIT_REASON;
-
-typedef struct {
- QWORD qKernelTime; // 100 nsec units
- QWORD qUserTime; // 100 nsec units
- QWORD qCreateTime; // relative to 01-01-1601
- DWORD d18;
- PVOID pStartAddress;
- CLIENT_ID Cid; // process/thread ids
- DWORD dPriority;
- DWORD dBasePriority;
- DWORD dContextSwitches;
- DWORD dThreadState; // 2=running, 5=waiting
- KWAIT_REASON WaitReason;
- DWORD dReserved01;
-} SYSTEM_THREAD;
-
-typedef struct {
- DWORD dNext; // relative offset
- DWORD dThreadCount;
- DWORD dReserved01;
- DWORD dReserved02;
- DWORD dReserved03;
- DWORD dReserved04;
- DWORD dReserved05;
- DWORD dReserved06;
- QWORD qCreateTime; // relative to 01-01-1601
- QWORD qUserTime; // 100 nsec units
- QWORD qKernelTime; // 100 nsec units
- UNICODE_STRING usName;
- KPRIORITY BasePriority;
- DWORD dUniqueProcessId;
- DWORD dInheritedFromUniqueProcessId;
- DWORD dHandleCount;
- DWORD dReserved07;
- DWORD dReserved08;
- VM_COUNTERS VmCounters;
- DWORD dCommitCharge; // bytes
- SYSTEM_THREAD ast[1];
-} SYSTEM_PROCESS_INFORMATION;
-
-// The sic opcode for NtQuerySystemInformation
-typedef enum {
- SystemProcessInformation = 5,
- SystemHandleInformation = 16,
-} SYSTEMINFOCLASS;
-
-
-#define STATUS_SUCCESS 0x00000000
-#define STATUS_UNSUCCESSFUL 0xC0000001
-#define STATUS_NOT_IMPLEMENTED 0xC0000002
-#define STATUS_INVALID_INFO_CLASS 0xC0000003
-#define STATUS_INFO_LENGTH_MISMATCH 0xC0000004
-#define STATUS_INVALID_PARAMETER 0xC000000D
-
-typedef DWORD (WINAPI *NtQuerySystemInformationFuncPtr)(
- DWORD sic, VOID* pData, DWORD sSize, ULONG* pdSize);
-typedef DWORD (WINAPI *NtQueryInformationFileFuncPtr)(HANDLE, PVOID, PVOID, DWORD, DWORD);
-typedef DWORD (WINAPI *NtQueryObjectFuncPtr)(HANDLE, DWORD, VOID*, DWORD, VOID*);
-
-static NtQuerySystemInformationFuncPtr sNtQuerySystemInformationFunc;
-static NtQueryInformationFileFuncPtr sNtQueryInformationFileFunc;
-static NtQueryObjectFuncPtr sNtQueryObjectFunc;
-
-//------------
-
-// Get the NT DLL functions we need to use.
-static bool init() {
-
- sNtQuerySystemInformationFunc =
- (NtQuerySystemInformationFuncPtr) GetProcAddress(
- GetModuleHandleA("ntdll.dll"), "NtQuerySystemInformation");
-
- sNtQueryInformationFileFunc =
- (NtQueryInformationFileFuncPtr) GetProcAddress(
- GetModuleHandleA("ntdll.dll"), "NtQueryInformationFile");
-
- sNtQueryObjectFunc =
- (NtQueryObjectFuncPtr) GetProcAddress(
- GetModuleHandleA("ntdll.dll"), "NtQueryObject");
-
- return sNtQuerySystemInformationFunc != NULL &&
- sNtQueryInformationFileFunc != NULL &&
- sNtQueryObjectFunc != NULL;
-}
-
-static void terminate() {
- sNtQuerySystemInformationFunc = NULL;
- sNtQueryInformationFileFunc = NULL;
- sNtQueryObjectFunc = NULL;
-}
-
-static bool adjustPrivileges() {
- char *error = NULL;
- HANDLE tokenH;
-
- // Open a process token that lets us adjust privileges
- BOOL ok = OpenProcessToken(GetCurrentProcess(), // ProcessHandle
- TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, // DesiredAccess
- &tokenH); // TokenHandle
- if (!ok) {
- error = "OpenProcessToken failed: ";
- goto bail_out;
- }
-
- // Lookup the privilege by name and get its local LUID token.
- // What we request:
- // SE_DEBUG_NAME, aka "SeDebugPrivilege"
- // MSDN: Required to debug and adjust the memory of a process owned by another account.
- // User Right: Debug programs.
- TOKEN_PRIVILEGES priv;
- priv.PrivilegeCount = 1;
- priv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
- ok = LookupPrivilegeValueA(NULL, // lpSystemName
- SE_DEBUG_NAME, // lpName
- &(priv.Privileges[0].Luid)); // lpLuid
- if (!ok) {
- error = "LookupPrivilegeValue failed: ";
- goto bail_out;
- }
-
- ok = AdjustTokenPrivileges(tokenH, // TokenHandle
- FALSE, // DisableAllPrivileges
- &priv, // NewState
- 0, // BufferLength
- NULL, // PreviousState
- 0); // ReturnLength
- if (!ok) {
- error = "AdjustTokenPrivileges failed: ";
- goto bail_out;
- }
-
-bail_out:
- if (error != NULL && gIsDebug) {
- CString err;
- err.setLastWin32Error(error);
- fprintf(stderr, "%s", err.cstr());
- }
-
- if (tokenH != NULL) {
- CloseHandle(tokenH);
- }
-
- return !!ok;
-}
-
-static bool getHandleType(HANDLE h, CString *type) {
- bool result = false;
- ULONG size = 0;
- // Get the size of the type string
- int status = sNtQueryObjectFunc(h, 2, NULL, 0, &size);
- if (status == STATUS_INFO_LENGTH_MISMATCH && size > 0) {
- // Get the type string itself
- char *buf = new char[size];
- status = sNtQueryObjectFunc(h, 2, buf, size, NULL);
- if (status == 0 && size > 96) {
- // The type string we want is a wide unicode (UTF16)
- // zero-terminated string located at offset 96 in the
- // buffer. In our case we want the string to be
- // "Directory" or "File" so we know the max useful length
- // is 9.
- // Since we can only deal with ansi strings in this program,
- // we'll make a crude copy of every other byte and just check
- // that the other bytes are zero.
- const char *c = buf + 96;
- const char *e = buf + 96 + size;
- // we'll write at the beginning of our buffer
- char *dest = buf;
- char *dend = dest + 9;
- for (; c < e && dest < dend && c[0] != '\0' && c[1] == '\0'; c += 2, dest++) {
- *dest = *c;
- }
- *(dest++) = '\0';
- type->set(buf, dest - buf);
- result = true;
- }
-
- free(buf);
- }
- return result;
-}
-
-// These is the wide unicode representations of the type we want to find.
-static const char kFileW[] = "File";
-
-static char isFileHandleType(HANDLE handle) {
- char type = 0;
- ULONG size = 0;
- // Get the size of the type string
- int status = sNtQueryObjectFunc(handle, 2, NULL, 0, &size);
- if (status == STATUS_INFO_LENGTH_MISMATCH && size > 0) {
- // Get the type string itself
- char *buf = new char[size];
- status = sNtQueryObjectFunc(handle, 2, buf, size, NULL);
- if (status == 0 && size > 96) {
- // The type string we want is a wide unicode (UTF16-LE)
- // zero-terminated string located at offset 96 in the
- // buffer. In our case we want the string to be "File".
- //
- // Since we're reading wide unicode, we want each character
- // to be the one from our string followed by a zero byte.
- // e.g. c should point to F \0 i \0 l \0 e \0 \0 \0.
- const char *c = buf + 96;
- type = c[0];
-
- int len = sizeof(kFileW);
- const char *d = kFileW;
-
- for (; type != 0 && len > 0; c+=2, d++, len--) {
- if (c[0] != *d || c[1] != 0) {
- type = 0;
- break;
- }
- }
- }
-
- free(buf);
- }
- return type;
-}
-
-typedef struct {
- HANDLE handle;
- CString *outStr;
- bool result;
-} SFileNameInfo;
-
-static unsigned __stdcall FileNameThreadFunc(void *param) {
- SFileNameInfo *info = (SFileNameInfo *)param;
- if (info == NULL) {
- return 1;
- }
-
- char buf[MAX_PATH*2 + 4];
- DWORD iob[2] = { 0, 0 };
-
- DWORD status = sNtQueryInformationFileFunc(info->handle, iob, buf, sizeof(buf), 9);
- if (status == STATUS_SUCCESS) {
- // The result is a buffer with:
- // - DWORD (4 bytes) for the *byte* length (so twice the character length)
- // - Actual string in Unicode
- // Not sure of the actual type, but it does look like a UNICODE_STRING struct.
-
- DWORD len = ((DWORD *)buf)[0];
- if (len <= MAX_PATH * 2) {
- // We can't handle wide Unicode. What we do is convert it into
- // straight ansi by just retaining the first of each couple bytes.
- // Bytes that cannot be mapped (e.g. 2nd byte is != 0) will be
- // simply converted to 0xFF.
-
- unsigned char *dest = (unsigned char *)buf + 4;
- unsigned char *src = (unsigned char *)buf + 4;
- for (DWORD i = 0; i < len; dest++, src += 2, i += 2) {
- if (src[1] == 0) {
- *dest = *src;
- } else {
- *dest = 0xFF;
- }
- }
- *dest = '\0';
- info->outStr->set(buf + 4, len);
- info->result = true;
- return 0;
- }
- }
- return 1;
-}
-
-static bool getFileName(HANDLE handle, CString *outStr) {
- SFileNameInfo info;
- info.handle = handle;
- info.outStr = outStr;
- info.result = false;
-
- // sNtQueryInformationFileFunc might hang on some handles.
- // A trick is to do it in a thread and if it takes too loog then
- // just shutdown the thread, since it's deadlocked anyway.
- unsigned threadId;
- HANDLE th = (HANDLE)_beginthreadex(NULL, // security
- 0, // stack_size
- &FileNameThreadFunc, // address
- &info, // arglist
- 0, // initflag
- &threadId); // thrdaddr
-
- if (th == NULL) {
- // Failed to create thread. Shouldn't really happen.
- outStr->set("<failed to create thread>");
- return false;
- }
-
- bool result = false;
-
- // Wait for thread or kill it if it takes too long.
- if (WaitForSingleObject(th /*handle*/, 200 /*ms*/) == WAIT_TIMEOUT) {
- TerminateThread(th /*handle*/, 0 /*retCode*/);
- outStr->set("<timeout>");
- } else {
- result = info.result;
- }
-
- CloseHandle(th);
- return result;
-}
-
-// Find the name of the process (e.g. "java.exe") given its id.
-// processesPtr must be the list returned by getAllProcesses().
-// Special handling for javaw.exe: this isn't quite useful so
-// we also try to find and append the parent process name.
-static bool getProcessName(SYSTEM_PROCESS_INFORMATION *processesPtr,
- DWORD remoteProcessId,
- CString *outStr) {
- SYSTEM_PROCESS_INFORMATION *ptr = processesPtr;
- while (ptr != NULL) {
- if (ptr->dUniqueProcessId == remoteProcessId) {
- // This is the process we want.
-
- UNICODE_STRING *uniStr = &(ptr->usName);
- WORD len = uniStr->Length;
-
- char buf[MAX_PATH];
- if (len <= MAX_PATH * 2) {
- // We can't handle wide Unicode. What we do is convert it into
- // straight ansi by just retaining the first of each couple bytes.
- // Bytes that cannot be mapped (e.g. 2nd byte is != 0) will be
- // simply converted to 0xFF.
-
- unsigned char *dest = (unsigned char *)buf;
- unsigned char *src = (unsigned char *)uniStr->Buffer;
- for (WORD i = 0; i < len; dest++, src += 2, i += 2) {
- if (src[1] == 0) {
- *dest = *src;
- } else {
- *dest = 0xFF;
- }
- }
- *dest = '\0';
- outStr->set(buf, len);
-
- if (strcmp(buf, "javaw.exe") == 0) {
- // Heuristic: eclipse often shows up as javaw.exe
- // but what is useful is to report eclipse to the user
- // instead.
- // So in this case, look at the parent and report it too.
- DWORD parentId = ptr->dInheritedFromUniqueProcessId;
- if (parentId > 0) {
- CString name2;
- bool ok2 = getProcessName(processesPtr,
- parentId,
- &name2);
- if (ok2) {
- outStr->add(" (");
- outStr->add(name2.cstr());
- outStr->add(")");
- }
- }
- }
-
- return true;
- }
- }
-
- // Look at the next process, if any.
- if (ptr->dNext == NULL) {
- break;
- } else {
- ptr = (SYSTEM_PROCESS_INFORMATION *)((char *)ptr + ptr->dNext);
- }
- }
-
- outStr->setf("<process id %08x name not found>", remoteProcessId);
- return false;
-}
-
-// Query system for all processes information.
-// Returns an error string in case of error.
-// Returns the virtual_alloc-allocated buffer on success or NULL on error.
-// It's up to the caller to do a VirtualFree on the returned buffer.
-static SYSTEM_PROCESS_INFORMATION *queryAllProcess(const char **error) {
- // Allocate a buffer for the process information. We don't know the
- // exact size. A normal system might typically have between 100-200 processes.
- // We'll resize the buffer if not big enough.
- DWORD infoSize = 4096;
- SYSTEM_PROCESS_INFORMATION *infoPtr =
- (SYSTEM_PROCESS_INFORMATION *) VirtualAlloc(NULL, infoSize, MEM_COMMIT, PAGE_READWRITE);
-
- if (infoPtr != NULL) {
- // Query the actual size needed (or the data if it fits in the buffer)
- DWORD needed = 0;
- if (sNtQuerySystemInformationFunc(
- SystemProcessInformation, infoPtr, infoSize, &needed) != 0) {
- if (needed == 0) {
- // Shouldn't happen.
- *error = "No processes found";
- goto bail_out;
- }
-
- // Realloc
- VirtualFree(infoPtr, 0, MEM_RELEASE);
- infoSize += needed;
- infoPtr = (SYSTEM_PROCESS_INFORMATION *) VirtualAlloc(
- NULL, infoSize, MEM_COMMIT, PAGE_READWRITE);
-
- // Query all the processes objects again
- if (sNtQuerySystemInformationFunc(
- SystemProcessInformation, infoPtr, infoSize, NULL) != 0) {
- *error = "Failed to query system processes";
- goto bail_out;
- }
- }
- }
-
- if (infoPtr == NULL) {
- *error = "Failed to allocate system processes info buffer";
- goto bail_out;
- }
-
-bail_out:
- if (*error != NULL) {
- VirtualFree(infoPtr, 0, MEM_RELEASE);
- infoPtr = NULL;
- }
- return infoPtr;
-}
-
-// Query system for all handle information.
-// Returns an error string in case of error.
-// Returns the virtual_alloc-allocated buffer on success or NULL on error.
-// It's up to the caller to do a VirtualFree on the returned buffer.
-static SYSTEM_HANDLE_INFORMATION *queryAllHandles(const char **error) {
- // Allocate a buffer. It won't be large enough to get the handles
- // (e.g. there might be 10k or 40k handles around). We'll resize
- // it once we know the actual size.
- DWORD infoSize = 4096;
- SYSTEM_HANDLE_INFORMATION *infoPtr =
- (SYSTEM_HANDLE_INFORMATION *) VirtualAlloc(NULL, infoSize, MEM_COMMIT, PAGE_READWRITE);
-
- if (infoPtr != NULL) {
- // Query the actual size needed
- DWORD needed = 0;
- if (sNtQuerySystemInformationFunc(
- SystemHandleInformation, infoPtr, infoSize, &needed) != 0) {
- if (needed == 0) {
- // Shouldn't happen.
- *error = "No handles found";
- goto bail_out;
- }
-
- // Realloc
- VirtualFree(infoPtr, 0, MEM_RELEASE);
- infoSize += needed;
- infoPtr = (SYSTEM_HANDLE_INFORMATION *) VirtualAlloc(
- NULL, infoSize, MEM_COMMIT, PAGE_READWRITE);
- }
- }
-
- if (infoPtr == NULL) {
- *error = "Failed to allocate system handle info buffer";
- goto bail_out;
- }
-
- // Query all the handle objects
- if (sNtQuerySystemInformationFunc(SystemHandleInformation, infoPtr, infoSize, NULL) != 0) {
- *error = "Failed to query system handles";
- goto bail_out;
- }
-
-bail_out:
- if (*error != NULL) {
- VirtualFree(infoPtr, 0, MEM_RELEASE);
- infoPtr = NULL;
- }
- return infoPtr;
-}
-
-bool findLock(CPath &path, CString *outModule) {
- bool result = false;
- const char *error = NULL;
-
- SYSTEM_PROCESS_INFORMATION *processesPtr = NULL;
- SYSTEM_HANDLE_INFORMATION *handlesPtr = NULL;
-
- const HANDLE currProcessH = GetCurrentProcess();
- const DWORD currProcessId = GetCurrentProcessId();
- HANDLE remoteProcessH = NULL;
- DWORD remoteProcessId = 0;
- DWORD matchProcessId = 0;
-
- int numHandleFound = 0;
- int numHandleChecked = 0;
- int numHandleDirs = 0;
- int numHandleFiles = 0;
- int numProcessMatch = 0;
-
- BYTE ob_type_file = 0;
-
- // Get the path to search, without the drive letter.
- const char *searchPath = path.cstr();
- if (isalpha(searchPath[0]) && searchPath[1] == ':') {
- searchPath += 2;
- }
- size_t searchPathLen = strlen(searchPath);
-
- if (gIsDebug) fprintf(stderr, "Search path: '%s'\n", searchPath);
-
- if (!init()) {
- error = "Failed to bind to ntdll.dll";
- goto bail_out;
- }
-
- if (!adjustPrivileges()) {
- // We can still continue even if the privilege escalation failed.
- // The apparent effect is that we'll fail to query the name of
- // some processes, yet it will work for some of them.
- if (gIsDebug) fprintf(stderr, "Warning: adusting privileges failed. Continuing anyway.\n");
- } else {
- if (gIsDebug) fprintf(stderr, "Privileges adjusted.\n"); // DEBUG remove lter
- }
-
- processesPtr = queryAllProcess(&error);
- if (processesPtr == NULL) goto bail_out;
-
- handlesPtr = queryAllHandles(&error);
- if (handlesPtr == NULL) goto bail_out;
-
- numHandleFound = handlesPtr->dCount;
-
- // Check all the handles
- for (int n = handlesPtr->dCount, i = 0; i < n; i++) {
- SYSTEM_HANDLE sysh = handlesPtr->ash[i];
-
- if (ob_type_file != 0 && sysh.bObjectType != ob_type_file) {
- continue;
- }
-
- HANDLE handle = (HANDLE) sysh.wValue;
- DWORD remoteId = sysh.dIdProcess;
- HANDLE remoteH = NULL;
-
- if (remoteId == matchProcessId) {
- // We already matched that process, we can skip its other entries.
- continue;
- }
-
- if (remoteId == currProcessId) {
- // We don't match ourselves
- continue;
- }
-
- // Open a remote process.
- // Most entries of a given process seem to be consecutive, so we
- // only open the remote process handle if it's a different id.
- if (remoteProcessH == NULL && remoteId == remoteProcessId) {
- // We already tried to open this process and it failed.
- // It's not going to be any better the next time so skip it.
- continue;
- }
- if (remoteProcessH == NULL || remoteId != remoteProcessId) {
- if (remoteProcessH != NULL) {
- CloseHandle(remoteProcessH);
- }
-
- remoteProcessId = remoteId;
- remoteProcessH = OpenProcess(PROCESS_DUP_HANDLE,
- FALSE /*inheritHandle*/,
- remoteProcessId);
- if (remoteProcessH == NULL) {
- continue;
- }
- }
-
- if (remoteProcessH != NULL) {
- // Duplicate the remote handle
- if (DuplicateHandle(remoteProcessH, // hSourceProcessHandle
- handle, // hSourceHandle
- currProcessH, // hTargetProcessHandle
- &remoteH, // lpTargetHandle
- 0, // dwDesiredAccess (ignored by same access)
- FALSE, // bInheritHandle
- DUPLICATE_SAME_ACCESS) == 0) {
- continue;
- }
- }
-
- numHandleChecked++;
-
- char type = isFileHandleType(remoteH);
-
- if (type != 0) {
- if (type == 'D') numHandleDirs++;
- else if (type == 'F') numHandleFiles++;
-
- // TODO simplify by not keeping directory handles
- if (ob_type_file == 0 && type == 'F') {
- // We found the first file handle. Remember it's system_handle object type
- // and then use it to filter the following system_handle.
- // For some reason OB_TYPE_FILE should be 0x1A but empirically I find it
- // to be 0x1C, so we just make this test more dynamic.
- ob_type_file = sysh.bObjectType;
- }
-
- // Try to get a filename out of that file or directory handle.
- CString name("<unknown>");
- bool ok = getFileName(remoteH, &name);
-
- if (gIsDebug) {
- fprintf(stderr, "P:%08x | t:%02x | f:%02x | v:%08x | %c | %s %s\n",
- sysh.dIdProcess, sysh.bObjectType, sysh.bFlags, sysh.wValue,
- type,
- ok ? "OK" : "FAIL",
- name.cstr()
- );
- }
-
- if (ok) {
- // We got a file path. Let's check if it matches our target path.
- if (_strnicmp(searchPath, name.cstr(), searchPathLen) == 0) {
- // Remember this process id so that we can ignore all its following entries.
- matchProcessId = remoteId;
-
- // Find out its process name
- CString procName("<unknown>");
- ok = getProcessName(processesPtr, remoteProcessId, &procName);
- if (ok) {
- numProcessMatch++;
-
- if (!outModule->isEmpty()) {
- outModule->add(";");
- }
- outModule->add(procName.cstr());
- result = true;
- }
-
- if (gIsDebug) {
- fprintf(stderr, "==> MATCH FOUND: %s %s\n",
- ok ? "OK" : "FAIL",
- procName.cstr()
- );
- }
- }
- }
-
- }
-
- if (remoteH != NULL) {
- CloseHandle(remoteH);
- remoteH = NULL;
- }
- }
-
-bail_out:
-
- if (gIsDebug) {
- fprintf(stderr, "Processes matched: %d\n", numProcessMatch);
- fprintf(stderr, "Handles: %d found, %d checked, %d dirs, %d files\n",
- numHandleFound,
- numHandleChecked,
- numHandleDirs,
- numHandleFiles);
- }
-
- if (error != NULL) {
- CString msg;
- msg.setLastWin32Error(NULL);
- if (gIsDebug) fprintf(stderr, "[ERROR] %s: %s", error, msg.cstr());
- }
-
- if (remoteProcessH != NULL) {
- CloseHandle(remoteProcessH);
- }
-
- if (currProcessH != NULL) {
- CloseHandle(currProcessH);
- }
-
- if (handlesPtr != NULL) {
- VirtualFree(handlesPtr, 0, MEM_RELEASE);
- handlesPtr = NULL;
- }
-
- terminate();
-
- return result;
-}
-
-#endif /* _WIN32 */
diff --git a/find_lock/find_lock.exe.manifest b/find_lock/find_lock.exe.manifest deleted file mode 100755 index b26b66b0c..000000000 --- a/find_lock/find_lock.exe.manifest +++ /dev/null @@ -1,33 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-
-<!--
- For details on the Assembly Manifest, please look here:
- http://msdn.microsoft.com/en-us/library/aa374191(VS.85).aspx
--->
-
-<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
-
- <application>
- <!--The ID below indicates application support for Windows Vista -->
- <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />
- <!--The ID below indicates application support for Windows 7 -->
- <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />
- </application>
-
- <assemblyIdentity version="1.0.0.0"
- processorArchitecture="x86"
- name="Android.SDK.FindLock"
- type="win32"
- />
-
- <description>Utility to find which processes are locking an SDK folder.</description>
-
- <!-- Identify the application security requirements. -->
- <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
- <security>
- <requestedPrivileges>
- <requestedExecutionLevel level="asInvoker" uiAccess="false" />
- </requestedPrivileges>
- </security>
- </trustInfo>
-</assembly>
diff --git a/find_lock/find_lock.h b/find_lock/find_lock.h deleted file mode 100755 index d7ade0a37..000000000 --- a/find_lock/find_lock.h +++ /dev/null @@ -1,25 +0,0 @@ -/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _H_FIND_LOCK
-#define _H_FIND_LOCK
-
-#ifdef _WIN32
-
-bool findLock(CPath &path, CString *outModule);
-
-#endif /* _WIN32 */
-#endif /* _H_FIND_LOCK */
diff --git a/find_lock/find_lock_exe.cpp b/find_lock/find_lock_exe.cpp deleted file mode 100755 index d68b63ed3..000000000 --- a/find_lock/find_lock_exe.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * "find_lock.exe", for Windows only.
- */
-
-#ifdef _WIN32
-
-#include "utils.h"
-#include "find_lock.h"
-#include <io.h>
-#include <fcntl.h>
-
-int main(int argc, char* argv[]) {
-
- gIsConsole = true; // tell utils to to print errors to stderr
- gIsDebug = (getenv("ANDROID_SDKMAN_DEBUG") != NULL);
- CPath dirPath;
- bool doPrintUsage = false;
-
- for (int i = 1; i < argc; i++) {
- if (strncmp(argv[i], "-d", 2) == 0) {
- gIsDebug = true;
-
- } else if (dirPath.isEmpty()) {
- dirPath.set(argv[i]);
-
- } else {
- doPrintUsage = true;
- }
- }
-
- if (dirPath.isEmpty()) {
- fprintf(stderr, "Error: Missing directory path\n");
- doPrintUsage = true;
-
- } else if (!dirPath.dirExists()) {
- fprintf(stderr, "Error: '%s' is not a valid directory.\n", dirPath.cstr());
- return 1;
- }
-
- if (doPrintUsage) {
- printf(
- "Usage: find_lock.exe [options] sdk_directory_path\n"
- "\n"
- "Outputs the names of modules that are locking the given directory.\n"
- "Returns code 0 when found, 1 when not found.\n"
- "\n"
- "Options:\n"
- "-h / -help : This help.\n"
- "-t / -test : Internal test.\n"
- );
- return 2;
- }
-
- CString result;
- if (findLock(dirPath, &result)) {
- fflush(stdout);
- fflush(stderr);
- printf("%s", result.cstr());
- return 0;
- }
- return 1;
-}
-
-#endif /* _WIN32 */
diff --git a/find_lock/find_lock_exe.vcxproj b/find_lock/find_lock_exe.vcxproj deleted file mode 100644 index 9da38e6bc..000000000 --- a/find_lock/find_lock_exe.vcxproj +++ /dev/null @@ -1,168 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug|x64">
- <Configuration>Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|x64">
- <Configuration>Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectName>FindLock</ProjectName>
- <ProjectGuid>{42701EC1-6226-47FD-8817-57A3DEC7A1E2}</ProjectGuid>
- <RootNamespace>FindLock</RootNamespace>
- <Keyword>Win32Proj</Keyword>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <CharacterSet>MultiByte</CharacterSet>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <CharacterSet>MultiByte</CharacterSet>
- <WholeProgramOptimization>true</WholeProgramOptimization>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <CharacterSet>MultiByte</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <CharacterSet>MultiByte</CharacterSet>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\out\host\windows-x86\$(Configuration)\$(ProjectName)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\out\host\windows-x64\$(Configuration)\$(ProjectName)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)..\..\out\host\windows-x86\$(Configuration)\$(ProjectName)\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)..\..\out\host\windows-x64\$(Configuration)\$(ProjectName)\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\out\host\windows-x86\$(Configuration)\$(ProjectName)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\out\host\windows-x64\$(Configuration)\$(ProjectName)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)..\..\out\host\windows-x86\$(Configuration)\$(ProjectName)\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)..\..\out\host\windows-x64\$(Configuration)\$(ProjectName)\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\find_java\src\source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <DisableLanguageExtensions>false</DisableLanguageExtensions>
- <PrecompiledHeader>
- </PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
- </ClCompile>
- <Link>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\find_java\src\source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <DisableLanguageExtensions>false</DisableLanguageExtensions>
- <PrecompiledHeader>
- </PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <Link>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <SubSystem>Console</SubSystem>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <AdditionalIncludeDirectories>..\find_java\src\source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <PrecompiledHeader>
- </PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <Link>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <SubSystem>Console</SubSystem>
- <OptimizeReferences>true</OptimizeReferences>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <AdditionalIncludeDirectories>..\find_java\src\source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <PrecompiledHeader>
- </PrecompiledHeader>
- <WarningLevel>Level3</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <Link>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <SubSystem>Console</SubSystem>
- <OptimizeReferences>true</OptimizeReferences>
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- </Link>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="find_lock.cpp" />
- <ClCompile Include="find_lock_exe.cpp" />
- <ClCompile Include="..\find_java\src\source\utils.cpp" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="find_lock.h" />
- <ClInclude Include="..\find_java\src\source\utils.h" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project>
\ No newline at end of file diff --git a/find_lock/find_lock_exe.vcxproj.filters b/find_lock/find_lock_exe.vcxproj.filters deleted file mode 100644 index 85331fd8a..000000000 --- a/find_lock/find_lock_exe.vcxproj.filters +++ /dev/null @@ -1,36 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <Filter Include="Source Files">
- <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
- <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
- </Filter>
- <Filter Include="Header Files">
- <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
- <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- </Filter>
- <Filter Include="Resource Files">
- <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
- <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
- </Filter>
- </ItemGroup>
- <ItemGroup>
- <ClCompile Include="find_lock.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="find_lock_exe.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\find_java\src\source\utils.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="find_lock.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\find_java\src\source\utils.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- </ItemGroup>
-</Project>
\ No newline at end of file diff --git a/find_lock/images/android_icon.ico b/find_lock/images/android_icon.ico Binary files differdeleted file mode 100644 index bd2517901..000000000 --- a/find_lock/images/android_icon.ico +++ /dev/null diff --git a/find_lock/images/android_icon.rc b/find_lock/images/android_icon.rc deleted file mode 100644 index 2aa9985f3..000000000 --- a/find_lock/images/android_icon.rc +++ /dev/null @@ -1,2 +0,0 @@ -1 ICON "../images/android_icon.ico"
-1 RT_MANIFEST "../find_lock.exe.manifest"
|