Rev 6418 | Rev 6426 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6418 | Rev 6420 | ||
---|---|---|---|
Line 3... | Line 3... | ||
3 | ;; Copyright (C) KolibriOS team 2004-2016. All rights reserved. ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2016. All rights reserved. ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
5 | ;; ;; |
5 | ;; ;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 7... | Line 7... | ||
7 | 7 | ||
Line 8... | Line 8... | ||
8 | $Revision: 6418 $ |
8 | $Revision: 6420 $ |
Line 9... | Line 9... | ||
9 | 9 | ||
10 | ; NTFS driver |
10 | ; NTFS driver |
Line 1873... | Line 1873... | ||
1873 | push ebx ecx |
1873 | push ebx ecx |
1874 | mov ebx, edx |
1874 | mov ebx, edx |
1875 | jmp .forEXT |
1875 | jmp .forEXT |
Line 1876... | Line 1876... | ||
1876 | 1876 | ||
- | 1877 | ;---------------------------------------------------------------- |
|
- | 1878 | ntfs_GetFileInfo: |
|
- | 1879 | cmp byte [esi], 0 |
|
- | 1880 | jnz @f |
|
- | 1881 | movi eax, ERROR_UNSUPPORTED_FS |
|
- | 1882 | ret |
|
- | 1883 | @@: |
|
- | 1884 | call ntfs_lock |
|
- | 1885 | stdcall ntfs_find_lfn, [esp+4] |
|
- | 1886 | jnc .found |
|
- | 1887 | test eax, eax |
|
- | 1888 | jz ntfsFail |
|
- | 1889 | jmp ntfsNotFound |
|
- | 1890 | ||
- | 1891 | .found: |
|
- | 1892 | push esi edi |
|
- | 1893 | mov esi, eax |
|
- | 1894 | mov edi, [ebx+16] |
|
- | 1895 | xor eax, eax |
|
- | 1896 | call ntfs_direntry_to_bdfe |
|
- | 1897 | pop edi esi |
|
- | 1898 | call ntfs_unlock |
|
- | 1899 | xor eax, eax |
|
- | 1900 | ret |
|
- | 1901 | ||
1877 | ;---------------------------------------------------------------- |
1902 | ;---------------------------------------------------------------- |
1878 | ntfs_CreateFolder: |
1903 | ntfs_CreateFolder: |
1879 | mov [ebp+NTFS.bFolder], 1 |
1904 | mov [ebp+NTFS.bFolder], 1 |
Line 1880... | Line 1905... | ||
1880 | jmp @f |
1905 | jmp @f |
Line 1895... | Line 1920... | ||
1895 | ; found, rewrite |
1920 | ; found, rewrite |
1896 | cmp [ebp+NTFS.cur_iRecord], 16 |
1921 | cmp [ebp+NTFS.cur_iRecord], 16 |
1897 | jc ntfsDenied |
1922 | jc ntfsDenied |
1898 | cmp [ebp+NTFS.bFolder], 1 |
1923 | cmp [ebp+NTFS.bFolder], 1 |
1899 | jz .folder |
1924 | jz .folder |
- | 1925 | test byte [eax+fileFlags], 1 |
|
- | 1926 | jnz ntfsDenied |
|
1900 | cmp [ebp+NTFS.fragmentCount], 1 |
1927 | cmp [ebp+NTFS.fragmentCount], 1 |
1901 | jnz ntfsUnsupported ; record fragmented |
1928 | jnz ntfsUnsupported ; record fragmented |
1902 | ; edit directory node |
1929 | ; edit directory node |
1903 | mov edi, [ebp+NTFS.cur_index_buf] |
1930 | mov edi, [ebp+NTFS.cur_index_buf] |
1904 | cmp dword [edi], 'INDX' |
1931 | cmp dword [edi], 'INDX' |
Line 1911... | Line 1938... | ||
1911 | mov cl, [esi+attributeOffset] |
1938 | mov cl, [esi+attributeOffset] |
1912 | sub esi, [ebp+NTFS.frs_buffer] |
1939 | sub esi, [ebp+NTFS.frs_buffer] |
1913 | add eax, ecx |
1940 | add eax, ecx |
1914 | add eax, esi |
1941 | add eax, esi |
1915 | @@: |
1942 | @@: |
- | 1943 | mov edi, eax |
|
1916 | mov edx, [ebx+12] |
1944 | mov eax, [ebx+12] |
1917 | mov [eax+fileRealSize], edx |
1945 | mov [edi+fileRealSize], eax |
1918 | mov dword [eax+fileRealSize+4], 0 |
1946 | mov dword [edi+fileRealSize+4], 0 |
- | 1947 | push ebx eax |
|
- | 1948 | call ntfsGetTime |
|
- | 1949 | mov [edi+fileModified], eax |
|
- | 1950 | mov [edi+fileModified+4], edx |
|
- | 1951 | mov [edi+recordModified], eax |
|
- | 1952 | mov [edi+recordModified+4], edx |
|
- | 1953 | mov [edi+fileAccessed], eax |
|
- | 1954 | mov [edi+fileAccessed+4], edx |
|
- | 1955 | pop edx ebx |
|
1919 | mov eax, [ebp+NTFS.LastRead] |
1956 | mov eax, [ebp+NTFS.LastRead] |
1920 | mov [ebp+NTFS.nodeLastRead], eax |
1957 | mov [ebp+NTFS.nodeLastRead], eax |
1921 | mov [ebp+NTFS.cur_attr], 0x80 |
1958 | mov [ebp+NTFS.cur_attr], 0x80 |
1922 | mov [ebp+NTFS.cur_offs], 0 |
1959 | mov [ebp+NTFS.cur_offs], 0 |
1923 | mov [ebp+NTFS.cur_size], 0 |
1960 | mov [ebp+NTFS.cur_size], 0 |
1924 | call ntfs_read_attr |
1961 | call ntfs_read_attr |
1925 | jc ntfsFail |
1962 | jc ntfsFail |
- | 1963 | mov esi, edi |
|
1926 | mov ecx, [ebp+NTFS.frs_buffer] |
1964 | mov edi, [ebp+NTFS.frs_buffer] |
- | 1965 | cmp word [edi+baseRecordReuse], 0 |
|
- | 1966 | jnz ntfsUnsupported ; auxiliary record |
|
- | 1967 | mov al, [edi+attributeOffset] |
|
- | 1968 | add edi, eax |
|
- | 1969 | mov al, [edi+attributeOffset] |
|
- | 1970 | add edi, eax |
|
- | 1971 | mov ecx, 6 |
|
- | 1972 | add esi, fileModified |
|
- | 1973 | add edi, 8 |
|
- | 1974 | rep movsd |
|
1927 | mov eax, edx |
1975 | mov eax, edx |
1928 | xor edx, edx |
1976 | xor edx, edx |
1929 | cmp word [ecx+baseRecordReuse], 0 |
- | |
1930 | jnz ntfsUnsupported ; auxiliary record |
- | |
1931 | mov ecx, [ebp+NTFS.attr_offs] |
1977 | mov ecx, [ebp+NTFS.attr_offs] |
1932 | cmp word [ecx+attributeFlags], 0 |
1978 | cmp word [ecx+attributeFlags], 0 |
1933 | jnz ntfsUnsupported |
1979 | jnz ntfsUnsupported |
1934 | push ebx |
1980 | push ebx |
1935 | cmp byte [ecx+nonResidentFlag], 0 |
1981 | cmp byte [ecx+nonResidentFlag], 0 |
Line 2424... | Line 2470... | ||
2424 | shr ecx, 2 |
2470 | shr ecx, 2 |
2425 | xor eax, eax |
2471 | xor eax, eax |
2426 | rep stosd |
2472 | rep stosd |
2427 | cld |
2473 | cld |
2428 | add edi, 4 |
2474 | add edi, 4 |
- | 2475 | call ntfsGetTime |
|
- | 2476 | mov [edi+fileCreated], eax |
|
- | 2477 | mov [edi+fileCreated+4], edx |
|
- | 2478 | mov [edi+fileModified], eax |
|
- | 2479 | mov [edi+fileModified+4], edx |
|
- | 2480 | mov [edi+recordModified], eax |
|
- | 2481 | mov [edi+recordModified+4], edx |
|
- | 2482 | mov [edi+fileAccessed], eax |
|
- | 2483 | mov [edi+fileAccessed+4], edx |
|
2429 | pop ecx |
2484 | pop ecx |
2430 | pop esi |
2485 | pop esi |
2431 | mov [edi+indexAllocatedSize], cx ; fill index with data |
2486 | mov [edi+indexAllocatedSize], cx ; fill index with data |
2432 | mov eax, [esp] |
2487 | mov eax, [esp] |
2433 | shl eax, 1 |
2488 | shl eax, 1 |
Line 2638... | Line 2693... | ||
2638 | ; $StandardInformation |
2693 | ; $StandardInformation |
2639 | mov byte [edi+attributeType], 10h |
2694 | mov byte [edi+attributeType], 10h |
2640 | mov byte [edi+sizeWithHeader], 48h |
2695 | mov byte [edi+sizeWithHeader], 48h |
2641 | mov byte [edi+sizeWithoutHeader], 30h |
2696 | mov byte [edi+sizeWithoutHeader], 30h |
2642 | mov byte [edi+attributeOffset], 18h |
2697 | mov byte [edi+attributeOffset], 18h |
- | 2698 | mov cl, 8 |
|
- | 2699 | add esi, fileCreated |
|
2643 | add edi, 48h |
2700 | add edi, 18h |
- | 2701 | rep movsd |
|
- | 2702 | add edi, 16 |
|
- | 2703 | mov esi, [ebp+NTFS.indexPointer] |
|
2644 | ; $FileName |
2704 | ; $FileName |
2645 | mov byte [edi+attributeType], 30h |
2705 | mov byte [edi+attributeType], 30h |
2646 | mov byte [edi+attributeID], 1 |
2706 | mov byte [edi+attributeID], 1 |
2647 | mov byte [edi+attributeOffset], 18h |
2707 | mov byte [edi+attributeOffset], 18h |
2648 | mov byte [edi+indexedFlag], 1 |
2708 | mov byte [edi+indexedFlag], 1 |
Line 3482... | Line 3542... | ||
3482 | call ntfs_lock |
3542 | call ntfs_lock |
3483 | stdcall ntfs_find_lfn, [esp+4] |
3543 | stdcall ntfs_find_lfn, [esp+4] |
3484 | jc ntfsNotFound |
3544 | jc ntfsNotFound |
3485 | cmp [ebp+NTFS.cur_iRecord], 16 |
3545 | cmp [ebp+NTFS.cur_iRecord], 16 |
3486 | jc ntfsDenied |
3546 | jc ntfsDenied |
3487 | bt dword [eax+fileFlags], 28 |
3547 | test dword [eax+fileFlags], 10000001h |
3488 | jc ntfsDenied |
3548 | jnz ntfsDenied |
3489 | cmp [ebp+NTFS.fragmentCount], 1 |
3549 | cmp [ebp+NTFS.fragmentCount], 1 |
3490 | jnz ntfsUnsupported ; record fragmented |
3550 | jnz ntfsUnsupported ; record fragmented |
3491 | ; edit directory node |
3551 | ; edit directory node |
3492 | mov edi, [ebp+NTFS.cur_index_buf] |
3552 | mov edi, [ebp+NTFS.cur_index_buf] |
3493 | cmp dword [edi], 'INDX' |
3553 | cmp dword [edi], 'INDX' |
Line 3500... | Line 3560... | ||
3500 | mov cl, [esi+attributeOffset] |
3560 | mov cl, [esi+attributeOffset] |
3501 | sub esi, [ebp+NTFS.frs_buffer] |
3561 | sub esi, [ebp+NTFS.frs_buffer] |
3502 | add eax, ecx |
3562 | add eax, ecx |
3503 | add eax, esi |
3563 | add eax, esi |
3504 | @@: |
3564 | @@: |
- | 3565 | mov edi, eax |
|
3505 | mov ecx, [ebx+4] |
3566 | mov eax, [ebx+4] |
3506 | mov edx, [ebx+8] |
3567 | mov edx, [ebx+8] |
3507 | add ecx, [ebx+12] |
3568 | add eax, [ebx+12] |
3508 | adc edx, 0 |
3569 | adc edx, 0 |
3509 | mov [eax+fileRealSize], ecx |
3570 | mov [edi+fileRealSize], eax |
3510 | mov [eax+fileRealSize+4], edx |
3571 | mov [edi+fileRealSize+4], edx |
- | 3572 | push edx eax ebx |
|
- | 3573 | call ntfsGetTime |
|
- | 3574 | mov [edi+fileModified], eax |
|
- | 3575 | mov [edi+fileModified+4], edx |
|
- | 3576 | mov [edi+recordModified], eax |
|
- | 3577 | mov [edi+recordModified+4], edx |
|
- | 3578 | mov [edi+fileAccessed], eax |
|
- | 3579 | mov [edi+fileAccessed+4], edx |
|
- | 3580 | pop ebx ecx edx |
|
3511 | mov eax, [ebp+NTFS.LastRead] |
3581 | mov eax, [ebp+NTFS.LastRead] |
3512 | mov [ebp+NTFS.nodeLastRead], eax |
3582 | mov [ebp+NTFS.nodeLastRead], eax |
3513 | mov [ebp+NTFS.cur_attr], 0x80 |
3583 | mov [ebp+NTFS.cur_attr], 0x80 |
3514 | mov [ebp+NTFS.cur_offs], 0 |
3584 | mov [ebp+NTFS.cur_offs], 0 |
3515 | mov [ebp+NTFS.cur_size], 0 |
3585 | mov [ebp+NTFS.cur_size], 0 |
3516 | call ntfs_read_attr |
3586 | call ntfs_read_attr |
3517 | jc ntfsFail |
3587 | jc ntfsFail |
3518 | mov eax, ecx |
3588 | mov esi, edi |
3519 | mov ecx, [ebp+NTFS.frs_buffer] |
3589 | mov edi, [ebp+NTFS.frs_buffer] |
3520 | cmp word [ecx+baseRecordReuse], 0 |
3590 | cmp word [edi+baseRecordReuse], 0 |
3521 | jnz ntfsUnsupported ; auxiliary record |
3591 | jnz ntfsUnsupported ; auxiliary record |
- | 3592 | mov al, [edi+attributeOffset] |
|
- | 3593 | add edi, eax |
|
- | 3594 | mov al, [edi+attributeOffset] |
|
- | 3595 | add edi, eax |
|
- | 3596 | mov eax, ecx |
|
- | 3597 | mov ecx, 6 |
|
- | 3598 | add esi, fileModified |
|
- | 3599 | add edi, 8 |
|
- | 3600 | rep movsd |
|
3522 | mov ecx, [ebp+NTFS.attr_offs] |
3601 | mov ecx, [ebp+NTFS.attr_offs] |
3523 | cmp word [ecx+attributeFlags], 0 |
3602 | cmp word [ecx+attributeFlags], 0 |
3524 | jnz ntfsUnsupported |
3603 | jnz ntfsUnsupported |
3525 | push ebx |
3604 | push ebx |
3526 | cmp byte [ecx+nonResidentFlag], 0 |
3605 | cmp byte [ecx+nonResidentFlag], 0 |
Line 3643... | Line 3722... | ||
3643 | call ntfs_lock |
3722 | call ntfs_lock |
3644 | stdcall ntfs_find_lfn, [esp+4] |
3723 | stdcall ntfs_find_lfn, [esp+4] |
3645 | jc ntfsNotFound |
3724 | jc ntfsNotFound |
3646 | cmp [ebp+NTFS.cur_iRecord], 16 |
3725 | cmp [ebp+NTFS.cur_iRecord], 16 |
3647 | jc ntfsDenied |
3726 | jc ntfsDenied |
- | 3727 | test byte [eax+fileFlags], 1 |
|
- | 3728 | jnz ntfsDenied |
|
3648 | cmp [ebp+NTFS.fragmentCount], 1 |
3729 | cmp [ebp+NTFS.fragmentCount], 1 |
3649 | jnz ntfsUnsupported ; record fragmented |
3730 | jnz ntfsUnsupported ; record fragmented |
3650 | mov ebx, [eax+directoryRecordReference] |
3731 | mov ebx, [eax+directoryRecordReference] |
3651 | mov [ebp+NTFS.newRecord], ebx |
3732 | mov [ebp+NTFS.newRecord], ebx |
3652 | mov bx, [eax+fileReferenceReuse] |
3733 | mov bx, [eax+fileReferenceReuse] |
Line 3684... | Line 3765... | ||
3684 | mov esi, [ebp+NTFS.frs_buffer] |
3765 | mov esi, [ebp+NTFS.frs_buffer] |
3685 | cmp word [esi+baseRecordReuse], 0 |
3766 | cmp word [esi+baseRecordReuse], 0 |
3686 | jnz ntfsUnsupported ; auxiliary record |
3767 | jnz ntfsUnsupported ; auxiliary record |
3687 | cmp word [esi+reuseCounter], bx |
3768 | cmp word [esi+reuseCounter], bx |
3688 | jnz .backToIndex ; broken index |
3769 | jnz .backToIndex ; broken index |
3689 | cmp byte [esi+recordFlags], 0 |
3770 | test byte [esi+recordFlags], 1 |
3690 | jz .writeBitmapMFT ; record deleted |
3771 | jz .writeBitmapMFT ; record deleted |
3691 | cmp byte [esi+hardLinkCounter], 3 |
3772 | cmp byte [esi+hardLinkCounter], 3 |
3692 | jnc ntfsUnsupported |
3773 | jnc ntfsUnsupported |
3693 | mov esi, [ebp+NTFS.attr_offs] |
3774 | mov esi, [ebp+NTFS.attr_offs] |
3694 | cmp byte [esi+nonResidentFlag], 0 |
3775 | cmp byte [esi+nonResidentFlag], 0 |
Line 3959... | Line 4040... | ||
3959 | call ntfs_lock |
4040 | call ntfs_lock |
3960 | stdcall ntfs_find_lfn, [esp+4] |
4041 | stdcall ntfs_find_lfn, [esp+4] |
3961 | jc ntfsNotFound |
4042 | jc ntfsNotFound |
3962 | cmp [ebp+NTFS.cur_iRecord], 16 |
4043 | cmp [ebp+NTFS.cur_iRecord], 16 |
3963 | jc ntfsDenied |
4044 | jc ntfsDenied |
3964 | bt dword [eax+fileFlags], 28 |
4045 | test dword [eax+fileFlags], 10000001h |
3965 | jc ntfsDenied |
4046 | jnz ntfsDenied |
3966 | cmp [ebp+NTFS.fragmentCount], 1 |
4047 | cmp [ebp+NTFS.fragmentCount], 1 |
3967 | jnz ntfsUnsupported ; record fragmented |
4048 | jnz ntfsUnsupported ; record fragmented |
3968 | ; edit directory node |
4049 | ; edit directory node |
3969 | mov edi, [ebp+NTFS.cur_index_buf] |
4050 | mov edi, [ebp+NTFS.cur_index_buf] |
3970 | cmp dword [edi], 'INDX' |
4051 | cmp dword [edi], 'INDX' |
Line 3977... | Line 4058... | ||
3977 | mov cl, [esi+attributeOffset] |
4058 | mov cl, [esi+attributeOffset] |
3978 | sub esi, [ebp+NTFS.frs_buffer] |
4059 | sub esi, [ebp+NTFS.frs_buffer] |
3979 | add eax, ecx |
4060 | add eax, ecx |
3980 | add eax, esi |
4061 | add eax, esi |
3981 | @@: |
4062 | @@: |
- | 4063 | mov edi, eax |
|
3982 | mov ecx, [ebx+4] |
4064 | mov eax, [ebx+4] |
3983 | mov edx, [ebx+8] |
4065 | mov edx, [ebx+8] |
3984 | mov [eax+fileRealSize], ecx |
4066 | mov [edi+fileRealSize], eax |
3985 | mov [eax+fileRealSize+4], edx |
4067 | mov [edi+fileRealSize+4], edx |
- | 4068 | push edx eax ebx |
|
- | 4069 | call ntfsGetTime |
|
- | 4070 | mov [edi+fileModified], eax |
|
- | 4071 | mov [edi+fileModified+4], edx |
|
- | 4072 | mov [edi+recordModified], eax |
|
- | 4073 | mov [edi+recordModified+4], edx |
|
- | 4074 | mov [edi+fileAccessed], eax |
|
- | 4075 | mov [edi+fileAccessed+4], edx |
|
- | 4076 | pop ebx ecx edx |
|
3986 | mov eax, [ebp+NTFS.LastRead] |
4077 | mov eax, [ebp+NTFS.LastRead] |
3987 | mov [ebp+NTFS.nodeLastRead], eax |
4078 | mov [ebp+NTFS.nodeLastRead], eax |
3988 | mov [ebp+NTFS.cur_attr], 0x80 |
4079 | mov [ebp+NTFS.cur_attr], 0x80 |
3989 | mov [ebp+NTFS.cur_offs], 0 |
4080 | mov [ebp+NTFS.cur_offs], 0 |
3990 | mov [ebp+NTFS.cur_size], 0 |
4081 | mov [ebp+NTFS.cur_size], 0 |
3991 | call ntfs_read_attr |
4082 | call ntfs_read_attr |
3992 | jc ntfsFail |
4083 | jc ntfsFail |
3993 | mov eax, ecx |
4084 | mov esi, edi |
3994 | mov ecx, [ebp+NTFS.frs_buffer] |
4085 | mov edi, [ebp+NTFS.frs_buffer] |
3995 | cmp word [ecx+baseRecordReuse], 0 |
4086 | cmp word [edi+baseRecordReuse], 0 |
3996 | jnz ntfsUnsupported ; auxiliary record |
4087 | jnz ntfsUnsupported ; auxiliary record |
- | 4088 | mov al, [edi+attributeOffset] |
|
- | 4089 | add edi, eax |
|
- | 4090 | mov al, [edi+attributeOffset] |
|
- | 4091 | add edi, eax |
|
- | 4092 | mov eax, ecx |
|
- | 4093 | mov ecx, 6 |
|
- | 4094 | add esi, fileModified |
|
- | 4095 | add edi, 8 |
|
- | 4096 | rep movsd |
|
3997 | mov ecx, [ebp+NTFS.attr_offs] |
4097 | mov ecx, [ebp+NTFS.attr_offs] |
3998 | cmp word [ecx+attributeFlags], 0 |
4098 | cmp word [ecx+attributeFlags], 0 |
3999 | jnz ntfsUnsupported |
4099 | jnz ntfsUnsupported |
4000 | cmp byte [ecx+nonResidentFlag], 0 |
4100 | cmp byte [ecx+nonResidentFlag], 0 |
4001 | jz .resizeAttribute |
4101 | jz .resizeAttribute |
Line 4047... | Line 4147... | ||
4047 | mov edx, [ebp+NTFS.nodeLastRead] |
4147 | mov edx, [ebp+NTFS.nodeLastRead] |
4048 | call writeRecord ; directory |
4148 | call writeRecord ; directory |
4049 | call ntfsSpaceClean |
4149 | call ntfsSpaceClean |
4050 | jmp ntfsDone |
4150 | jmp ntfsDone |
Line -... | Line 4151... | ||
- | 4151 | ||
- | 4152 | ntfsReadCMOS: |
|
4051 | 4153 | out 70h, al |
|
- | 4154 | in al, 71h |
|
- | 4155 | xor ah, ah |
|
- | 4156 | shl ax, 4 |
|
- | 4157 | shr al, 4 |
|
- | 4158 | aad |
|
- | 4159 | ret |
|
4052 | ;---------------------------------------------------------------- |
4160 | |
- | 4161 | ntfsGetTime: |
|
- | 4162 | mov al, 7 |
|
- | 4163 | call ntfsReadCMOS |
|
- | 4164 | ror eax, 8 |
|
- | 4165 | mov al, 8 |
|
- | 4166 | call ntfsReadCMOS |
|
- | 4167 | ror eax, 8 |
|
- | 4168 | mov al, 9 |
|
- | 4169 | call ntfsReadCMOS |
|
- | 4170 | add eax, 2000 |
|
- | 4171 | ror eax, 16 |
|
- | 4172 | push eax |
|
- | 4173 | xor eax, eax |
|
- | 4174 | call ntfsReadCMOS |
|
- | 4175 | ror eax, 8 |
|
- | 4176 | mov al, 2 |
|
- | 4177 | call ntfsReadCMOS |
|
- | 4178 | ror eax, 8 |
|
- | 4179 | mov al, 4 |
|
- | 4180 | call ntfsReadCMOS |
|
- | 4181 | ror eax, 16 |
|
- | 4182 | push eax |
|
- | 4183 | mov esi, esp |
|
- | 4184 | add esp, 8 |
|
- | 4185 | ntfsCalculateTime: |
|
- | 4186 | ; in: esi -> data block |
|
- | 4187 | ; out: edx:eax = time |
|
- | 4188 | movzx eax, word [esi+6] |
|
- | 4189 | sub eax, 2001 |
|
- | 4190 | jnc @f |
|
- | 4191 | xor eax, eax |
|
- | 4192 | @@: |
|
- | 4193 | mov edx, months |
|
- | 4194 | mov ebx, eax |
|
- | 4195 | inc eax |
|
- | 4196 | test eax, 3 |
|
- | 4197 | jnz @f |
|
- | 4198 | add edx, 12 |
|
4053 | ntfs_SetFileInfo: |
4199 | @@: |
- | 4200 | movzx eax, byte [esi+5] |
|
- | 4201 | dec eax |
|
- | 4202 | xor ecx, ecx |
|
- | 4203 | @@: |
|
- | 4204 | dec eax |
|
- | 4205 | js @f |
|
- | 4206 | add cl, [edx+eax] |
|
- | 4207 | adc ch, 0 |
|
- | 4208 | jmp @b |
|
- | 4209 | @@: |
|
- | 4210 | mov eax, ebx |
|
- | 4211 | mov edx, 365 |
|
- | 4212 | mul edx |
|
- | 4213 | shr ebx, 2 |
|
- | 4214 | add eax, ebx |
|
- | 4215 | add eax, ecx |
|
- | 4216 | mov bl, [esi+4] |
|
- | 4217 | add eax, ebx |
|
- | 4218 | add eax, 400*365+100-4 |
|
- | 4219 | mov dl, 24 |
|
- | 4220 | mul edx |
|
- | 4221 | mov bl, [esi+2] |
|
- | 4222 | add eax, ebx |
|
- | 4223 | mov ecx, 60 |
|
- | 4224 | mul ecx |
|
- | 4225 | mov bl, [esi+1] |
|
- | 4226 | add eax, ebx |
|
- | 4227 | mul ecx |
|
- | 4228 | mov bl, [esi] |
|
- | 4229 | add ebx, eax |
|
- | 4230 | mov eax, edx |
|
- | 4231 | mov ecx, 10000000 |
|
- | 4232 | mul ecx |
|
- | 4233 | xchg eax, ebx |
|
- | 4234 | mul ecx |
|
4054 | movi eax, ERROR_UNSUPPORTED_FS |
4235 | add edx, ebx |
Line 4055... | Line 4236... | ||
4055 | ret |
4236 | ret |
4056 | 4237 | ||
4057 | ;---------------------------------------------------------------- |
4238 | ;---------------------------------------------------------------- |
4058 | ntfs_GetFileInfo: |
4239 | ntfs_SetFileInfo: |
4059 | cmp byte [esi], 0 |
4240 | cmp byte [esi], 0 |
4060 | jnz @f |
4241 | jnz @f |
4061 | movi eax, ERROR_UNSUPPORTED_FS |
4242 | movi eax, ERROR_UNSUPPORTED_FS |
4062 | ret |
4243 | ret |
4063 | @@: |
4244 | @@: |
4064 | call ntfs_lock |
4245 | call ntfs_lock |
4065 | stdcall ntfs_find_lfn, [esp+4] |
4246 | stdcall ntfs_find_lfn, [esp+4] |
4066 | jnc .found |
4247 | jnc @f |
4067 | test eax, eax |
4248 | test eax, eax |
- | 4249 | jz ntfsFail |
|
4068 | jz ntfsFail |
4250 | jmp ntfsNotFound |
- | 4251 | ||
- | 4252 | @@: |
|
- | 4253 | cmp [ebp+NTFS.fragmentCount], 1 |
|
- | 4254 | jnz ntfsUnsupported ; record fragmented |
|
- | 4255 | mov esi, [ebp+NTFS.cur_index_buf] |
|
4069 | jmp ntfsNotFound |
4256 | cmp dword [esi], 'INDX' |
- | 4257 | jz @f |
|
- | 4258 | sub eax, esi |
|
- | 4259 | mov esi, [ebp+NTFS.indexRoot] |
|
4070 | .found: |
4260 | movzx edx, byte [esi+attributeOffset] |
- | 4261 | add eax, esi |
|
4071 | push esi edi |
4262 | add eax, edx |
4072 | mov esi, eax |
4263 | @@: |
- | 4264 | mov esi, [ebx+16] |
|
- | 4265 | mov edi, eax |
|
- | 4266 | mov eax, [esi] |
|
- | 4267 | and eax, 27h |
|
- | 4268 | and byte [edi+fileFlags], -28h |
|
4073 | mov edi, [ebx+16] |
4269 | or [edi+fileFlags], al |
- | 4270 | add esi, 8 |
|
- | 4271 | call ntfsCalculateTime |
|
4074 | xor eax, eax |
4272 | mov [edi+fileCreated], eax |
4075 | call ntfs_direntry_to_bdfe |
4273 | mov [edi+fileCreated+4], edx |
- | 4274 | add esi, 8 |
|
- | 4275 | call ntfsCalculateTime |
|
4076 | pop edi esi |
4276 | mov [edi+fileAccessed], eax |
- | 4277 | mov [edi+fileAccessed+4], edx |
|
- | 4278 | add esi, 8 |
|
- | 4279 | call ntfsCalculateTime |
|
- | 4280 | mov [edi+fileModified], eax |
|
- | 4281 | mov [edi+fileModified+4], edx |
|
4077 | call ntfs_unlock |
4282 | mov ebx, [ebp+NTFS.cur_index_buf] |
- | 4283 | cmp dword [ebx], 'INDX' |
|
- | 4284 | jz @f |
|
- | 4285 | mov ebx, [ebp+NTFS.frs_buffer] |
|
- | 4286 | @@: |
|
- | 4287 | mov edx, [ebp+NTFS.LastRead] |
|
Line 4078... | Line 4288... | ||
4078 | xor eax, eax |
4288 | call writeRecord |
4079 | ret |
4289 | jmp ntfsDone |
4080 | 4290 | ||
4081 | ntfsUnsupported: |
4291 | ntfsUnsupported: |